我正在处理 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/

10-14 04:29