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>