XSLT 檢視
XSLT 是一種用於 XML 的轉換語言,在 Web 應用程式中作為檢視技術很受歡迎。如果您的應用程式自然地處理 XML,或者您的模型可以輕鬆轉換為 XML,那麼 XSLT 可能是檢視技術的不錯選擇。以下部分展示瞭如何在 Spring Web MVC 應用程式中生成 XML 文件作為模型資料,並使用 XSLT 對其進行轉換。
此示例是一個簡單的 Spring 應用程式,它在 Controller 中建立單詞列表並將其新增到模型對映中。返回該對映,以及我們的 XSLT 檢視的檢視名稱。有關 Spring Web MVC Controller 介面的詳細資訊,請參閱帶註解的控制器。XSLT 控制器將單詞列表轉換為一個簡單的 XML 文件,以便進行轉換。
Bean
對於一個簡單的 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>