XSLT ビュー
XSLT は XML の変換言語であり、Web アプリケーション内のビューテクノロジーとして一般的です。XSLT は、アプリケーションが自然に XML を処理する場合、またはモデルを XML に簡単に変換できる場合、ビューテクノロジとして適しています。次のセクションでは、XML データをモデルデータとして生成し、Spring Web MVC アプリケーションで XSLT で変換する方法を示します。
この例は、Controller
に単語のリストを作成し、モデルマップに追加する簡単な Spring アプリケーションです。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 ドキュメントの代わりに使用することもできます。
オブジェクトグラフを自動的に「支配」するソフトウェアパッケージがありますが、Spring 内では、選択した方法でモデルから DOM を作成する完全な柔軟性があります。これにより、XML の変換がモデルデータの構造に大きく影響し、DOM 化プロセスを管理するツールを使用する際の危険を防ぎます。
変換
最後に、XsltViewResolver
は「ホーム」XSLT テンプレートファイルを解決し、DOM ドキュメントをそれに統合してビューを生成します。XsltViewResolver
構成に示されているように、XSLT テンプレートは WEB-INF/xsl
ディレクトリの war
ファイルに存在し、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>