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

Struts2 当模板已经传递给Freemerker进行渲染时,如何实现路径解析?,struts2,freemarker,Struts2,Freemarker,我正在研究ApacheStruts2中的问题,以允许扩展使用FreeMarker编写的Struts标记。问题是在MultiTemplateLoader已解析路径后如何解析路径。或者换句话说,提议的解决方案是否有效 <#macro includeThemeTemplate templateName> <#list parameters.themeHierarchy as theme> <#attempt> <#include "/$

我正在研究ApacheStruts2中的问题,以允许扩展使用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,因为它更快,而且更易于维护。Java与
#include
的等价物是
freemarker.core.Environment.include
。要获取
环境
对象,您可以使用
环境.getCurrentEnvironment()
(或者如果您使用的是
TemplateDirectiveModel
,则将其作为参数获取)