XSLT - bu XML-ni o'zgartirish tili va u veb-ilovalarda ko'rsatish texnologiyasi sifatida mashhur. Agar sizning ilovangiz tabiiy ravishda XML bilan ishlasa yoki modelingizni XML ga osonlik bilan o'zgartirish mumkin bo'lsa, XSLT ko'rsatish texnologiyasi sifatida yaxshi tanlov bo'lishi mumkin. Keyingi bo'limda Spring Web MVC dagi ilovada model ma'lumotlari sifatida XML hujjatini yaratish va uni XSLT yordamida o'zgartirish ko'rsatilgan.
Bu misol oddiy Spring ilovasi bo'lib, Kontroller
da so'zlar ro'yhatini yaratadi va ularni model Map ga qo'shadi. Map qaytariladi va bizning XSLT ko'rinishimizning ko'rinish nomi ham qaytariladi. XSLT kontrolleri so'zlar ro'yhatini oddiy XML hujjatiga o'zgartiradi, bu esa o'zgartirishga tayyor.
Beanlar
Konfiguratsiya oddiy Spring veb-ilovasi uchun standart: MVC Konfiguratsiyasi XsltViewResolver
beanini va oddiy MVC annotatsiyasi konfiguratsiyasini aniqlashi kerak. Quyidagi misol buni qanday qilishni ko'rsatadi:
@EnableWebMvc
@ComponentScan
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
public XsltViewResolver xsltViewResolver() {
XsltViewResolver viewResolver = new XsltViewResolver();
viewResolver.setPrefix("/WEB-INF/xsl/");
viewResolver.setSuffix(".xslt");
return viewResolver;
}
}
@EnableWebMvc
@ComponentScan
@Configuration
class WebConfig : WebMvcConfigurer {
@Bean
fun xsltViewResolver() = XsltViewResolver().apply {
setPrefix("/WEB-INF/xsl/")
setSuffix(".xslt")
}
}
Kontroller
Bizga so'zlarni yaratish logikasini inkapsulyatsiya qiladigan kontroller ham kerak.
Kontroller logikasi @Controller
annotatsiyasi bilan belgilangan sinfda joylashgan va handler metodi quyidagicha aniqlangan:
@Controller
public class XsltController {
@RequestMapping("/")
public String home(Model model) throws Exception {
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Element root = document.createElement("wordList");
List<String> words = Arrays.asList("Hello", "Spring", "Framework");
for (String word : words) {
Element wordNode = document.createElement("word");
Text textNode = document.createTextNode(word);
wordNode.appendChild(textNode);
root.appendChild(wordNode);
}
model.addAttribute("wordList", root);
return "home";
}
}
import org.springframework.ui.set
@Controller
class XsltController {
@RequestMapping("/")
fun home(model: Model): String {
val document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument()
val root = document.createElement("wordList")
val words = listOf("Hello", "Spring", "Framework")
for (word in words) {
val wordNode = document.createElement("word")
val textNode = document.createTextNode(word)
wordNode.appendChild(textNode)
root.appendChild(wordNode)
}
model["wordList"] = root
return "home"
}
}
Hozircha biz faqat DOM-hujjat yaratdik va uni model Map ga qo'shdik. XML-faylni Resource
sifatida yuklash va moslashtirilgan DOM-hujjat o'rniga ishlatish mumkinligiga e'tibor bering.
Ob'ekt grafigini avtomatik ravishda "DOMifikatsiya" qiladigan dasturiy paketlar mavjud, ammo Spring sizning modelingizdan DOMni yaratishda tanlagan usulda to'liq moslashuvchanlikni ta'minlaydi. Bu XML o'zgartirishining model ma'lumotlar tuzilishingizda haddan tashqari rol o'ynashini oldini olish imkonini beradi, bu DOMifikatsiya jarayonini boshqarish uchun vositalardan foydalanganda xavf tug'diradi.
O'zgartirish
Oxir-oqibat, XsltViewResolver
XSLT shablonining "home" faylini aniqlaydi va unda DOM-hujjatni birlashtirib, bizning ko'rinishimizni yaratadi. XsltViewResolver
konfiguratsiyasida ko'rsatilgandek, XSLT shablonlari war
faylida WEB-INF/xsl
katalogida ishlaydi va xslt
fayl kengaytmasiga ega.
Quyidagi misol XSLT o'zgartirishini ko'rsatadi:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" omit-xml-declaration="yes"/>
<xsl:template match="/">
<html>
<head><title>Hello!</title></head>
<body>
<h1>My First Words</h1>
<ul>
<xsl:apply-templates/>
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="word">
<li><xsl:value-of select="."/></li>
</xsl:template>
</xsl:stylesheet>
Yuqoridagi o'zgartirish quyidagi HTML tarzida vizualizatsiya qilinadi:
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello!</title>
</head>
<body>
<h1>My First Words</h1>
<ul>
<li>Hello</li>
<li>Spring</li>
<li>Framework</li>
</ul>
</body>
</html>
GO TO FULL VERSION