Struts2 使用 xslt 结果类型如何把字符串直接作为 Document 内容(终结)

前面两篇:Struts2 使用 XSLTResult 输出页面内容详解 和 Struts2 使用 xslt 结果类型如何把字符串直接作为 Document 内容 对 Struts2 如何使用 xslt 结果和怎么把字符串直接作为 Document 内容进行的讲解、研究和探讨。关于 Action 中的字符怎么直接作为 xslt 的内容已有一种方法,就是把 String 转换成 org.w3c.dom.Document 类型再送给 xslt 文件。

同时也发现 Struts2 使用了 org.apache.struts2.views.xslt.StringAdapter 了对字符串的处理,并提供了 parseStringAsXML 的开关选项(虽然是无从设置它的值),但即使把 parseStringAsXML 设置成了 true,送给 xslt 文件的内容也是被包裹上了 <result> 根节点,xslt 中不得不用 <xsl:template match="/result/你的根节点"> 来应用模板。

通过在上一篇 Struts2 使用 xslt 结果类型如何把字符串直接作为 Document 内容 里琢磨来琢磨去的探寻,着实又走了不少弯路,甚至是误入了歧途,但终究是找到了一个较好的办法来让 Action 直接送 String 表示的 Document 给 xslt 文件。那就是自定义 StringXSLTResult,继承自 org.apache.struts2.views.xslt.XSLTResult,只需要覆盖它的 getDOMSourceForStack(Object value) 方法。完整的 StringXSLTResult 类代码如下:

现在如何使用它呢,先要在 struts.xml 文件中配置:

现在 Action 中只需要向 xslt 直接输送字符串就行:

在 /xslt/user.xslt 里,<user> 就是它所要处理 Document 的根节点了,没有额外的 <result>,所以 user.xslt 的内容写成:

上面显示出来的就是 Unmi 了。总之,记住了根节点不再是 <result> 了。以后碰到直接调用 Service 获得的是 XML String 的时候就可以使用这个自定义的 sxslt 结果了。

参考:1. Struts2 使用 XSLTResult 输出页面内容详解
             3. Struts2 使用 xslt 结果类型如何把字符串直接作为 Document 内容

本文链接 https://yanbin.blog/struts2-xslt-string-document-final/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments