2

我需要在服务器端处理 freemarker ftl 文件并将 HTML 返回给客户端。我想知道是否可以使用 template.process() 处理包含 struts 标签的 freemaker 模板。

动作类代码:

// Configuration created from struts2 freemarkermanager
FreemarkerManager freeMarkerManager = new FreemarkerManager();
Configuration config = freeMarkerManager.getConfiguration(context);

//Configuration without any specific settings.
Configuration config = new Configuration();
//Tried both nothing works.

Template template = config.getTemplate("TEMPLATE PATH");

Map<String, Object> inputMap = new HashMap<String, Object>();
inputMap.put("document", document);

StringWriter output = new StringWriter();
template.process(inputMap, output);

Freemarker模板

<#assign s=JspTaglibs["/struts-tags"]>
    <table>
        <tr>
           <th><@s.text name="Document Name"/></th>
           <th><@s.text name="Description"/></th>
        </tr>
        <@s.iterator value="inspiration" status="status">
    <tr>
    <td class="nowrap"><@s.property value="properties.DOCUMENT_NAME"/></td>
    <td class="nowrap"><@s.property value="properties.DESCRIPTION"/></td>
    </tr>
        </@s.iterator>
    </table>

我还在web-inf 文件夹下添加了struts-tags.tld 。

例外

freemarker.core.InvalidReferenceException:表达式 JspTaglibs 在第 1 行未定义,

如果我删除<#assign s=JspTaglibs["/struts-tags"]>

freemarker.core.InvalidReferenceException:表达式 s 在第 7 行未定义

4

1 回答 1

0

定义自定义变换方法,如下所示:

公共静态无效进程(
ServletContext 上下文,字符串模板,
Map values, Writer writer) 抛出 IOException,
模板异常
 {
 配置cfg =新配置();
 cfg.setDirectoryForTemplateLoading(新
 File(context.getRealPath("/templates")));
 cfg.setObjectWrapper(new DefaultObjectWrapper());

 BeansWrapper 包装器 = BeansWrapper.getDefaultInstance();

 TemplateHashModel staticModels = wrapper.getStaticModels();

 模板 temp = cfg.getTemplate(template);

 temp.process(值,作家);

 writer.flush();
 }

参考

于 2016-01-13T19:32:57.903 回答