当模板已经传递给Freemerker进行渲染时,如何实现路径解析?

时间:2013-07-30 12:01:06

标签: struts2 freemarker

我正在研究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"/>

1 个答案:

答案 0 :(得分:0)

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