以下のように、モデルで DOMSource() を返す可能性があります。
@RequestMapping
public String overview(Model model) {
model.addAttribute("obj", new DOMSource());
return "list";
}
SpringSource フォーラムに例があります。
SimpleFormController を忘れないでください (私のリンクの例から、Spring 3.0.x で廃止されましたが、XSL ビューを実装するためのロジックは同じです。
公式ドキュメントには非常に便利なものがいくつかあります。
特に、セクション:
17.5.1.3 モデル データを XML
17.5.1.4 に変換します。ビューのプロパティの定義
17.5.1.5. ドキュメント変換
あなたのコントローラー:
package xslt;
// 簡潔にするためにインポートを省略
public class HomePage extends AbstractXsltView {
protected Source createXsltSource(Map model, String rootName, HttpServletRequest
request, HttpServletResponse response) throws Exception {
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Element root = document.createElement(rootName);
List words = (List) model.get("wordList");
for (Iterator it = words.iterator(); it.hasNext();) {
String nextWord = (String) it.next();
Element wordNode = document.createElement("word");
Text textNode = document.createTextNode(nextWord);
wordNode.appendChild(textNode);
root.appendChild(wordNode);
}
return new DOMSource(root);
}
あなたのview.properties
ファイル:
home.(class)=xslt.HomePage
home.stylesheetLocation=/WEB-INF/xsl/home.xslt
home.root=words
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>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="word">
<xsl:value-of select="."/><br/>
</xsl:template>
</xsl:stylesheet>
幸運を!
Apache FOP プロジェクトとサーブレットを使用した XSL 変換について追加:
private FopFactory fopFactory = FopFactory.newInstance();
private TransformerFactory tFactory = TransformerFactory.newInstance();
public void init() throws ServletException {
//Optionally customize the FopFactory and TransformerFactory here
}
[..]
//Setup a buffer to obtain the content length
ByteArrayOutputStream out = new ByteArrayOutputStream();
//Setup FOP
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
//Setup Transformer
Source xsltSrc = new StreamSource(new File("foo-xml2fo.xsl"));
Transformer transformer = tFactory.newTransformer(xsltSrc);
//Make sure the XSL transformation's result is piped through to FOP
Result res = new SAXResult(fop.getDefaultHandler());
//Setup input
Source src = new StreamSource(new File("foo.xml"));
//Start the transformation and rendering process
transformer.transform(src, res);
//Prepare response
response.setContentType("application/pdf");
response.setContentLength(out.size());
//Send content to Browser
response.getOutputStream().write(out.toByteArray());
response.getOutputStream().flush();