我正在处理 Apache Struts 2 中的 WW-4145 问题,以允许扩展使用 FreeMarker 编写的 Struts 标签。问题是如何在 MultiTemplateLoader
已经解析路径之后解析路径。或者换句话说,建议的解决方案是否有效?
<#macro includeThemeTemplate templateName>
<#list parameters.themeHierarchy as theme>
<#attempt>
<#include "/${parameters.templateDir}/${theme}/${templateName}" />
<#break/>
<#recover>
</#attempt>
</#list>
<#-- Cause an exception intentionally which will have the top most theme -->
<#include "/${parameters.templateDir}/${parameters.themeHierarchy[0]}/${templateName}" />
</#macro>
和标签中的用法:
<@includeThemeTemplate "controlheader.ftl"/>
<#include "/${parameters.templateDir}/simple/checkboxlist.ftl" />
<@includeThemeTemplate "controlfooter.ftl"/>
最佳答案
我认为它没有问题,因为 FreeMarker 缓存失败的模板查找(意味着这不应该生成太多 I/O,前提是更新延迟不是太小)。但是,对于框架级别的东西,您可能会考虑使用 Java,因为它速度更快,而且通常更易于维护。 #include
的 Java 等价物是 freemarker.core.Environment.include
。要获取 Environment
对象,您可以使用 Environment.getCurrentEnvironment()
(或者如果您使用的是 TemplateDirectiveModel
,则将其作为参数)。
关于struts2 - 当模板已经传递给 Freemerker 进行渲染时,如何实现路径解析?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17946476/