4

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

1 回答 1

0

我认为它没有问题,因为 FreeMarker 缓存了失败的模板查找(意味着这不应该产生太多的 I/O,前提是更新延迟不是太小)。但是,对于框架级别的东西,您可能会考虑改用 Java,因为它更快并且通常更易于维护。Java 等价于#include. freemarker.core.Environment.include要获取Environment您可以使用的对象Environment.getCurrentEnvironment()(或者如果您使用的是TemplateDirectiveModel,则将其作为参数获取)。

于 2013-08-01T07:58:42.727 回答