XSLT视图
XSLT是一种用于XML的转换语言,在Web应用程序中作为视图技术而广受欢迎。如果您的应用程序自然处理XML,或者如果您的模型可以轻松转换为XML,那么XSLT可以作为一种很好的视图技术选择。以下部分展示了如何在Spring Web MVC应用程序中生成XML文档作为模型数据,并使用XSLT进行转换。
这个示例是一个简单的Spring应用程序,它在Controller
中创建一个单词列表,并将它们添加到模型映射中。该映射与我们的XSLT视图的视图名称一起返回。有关Spring Web MVC的Controller
接口的详细信息,请参见注解控制器。XSLT控制器将单词列表转换为一个简单的XML文档,准备进行转换。
Beans
对于简单的Spring Web应用程序,配置是标准的:MVC配置必须定义一个XsltViewResolver
bean和常规的MVC注解配置。以下示例展示了如何进行配置:
-
Java
-
Kotlin
@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")
}
}
控制器
我们还需要一个封装我们生成单词逻辑的控制器。
控制器逻辑封装在一个@Controller
类中,处理程序方法定义如下:
-
Java
-
Kotlin
@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"
}
}
到目前为止,我们只是创建了一个DOM文档并将其添加到模型映射中。请注意,您还可以将XML文件作为Resource
加载并使用,而不是使用自定义DOM文档。
有可用的软件包可以自动将对象图转换为DOM,但是在Spring中,您完全可以灵活地选择任何方式从模型创建DOM。这可以防止XML转换在模型数据结构中起到太大的作用,当使用工具管理DOM化过程时存在危险。
转换
最后,XsltViewResolver
解析“home” XSLT模板文件,并将DOM文档合并到其中以生成我们的视图。如XsltViewResolver
配置所示,XSLT模板位于war
文件中的WEB-INF/xsl
目录中,并以xslt
文件扩展名结尾。
以下示例展示了一个XSLT转换:
<?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>
上述转换呈现为以下HTML:
<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>