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