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);

フリーマーカー テンプレート:

<#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

次のようなカスタム変換メソッドを定義します。

public static void プロセス(
ServletContext コンテキスト、文字列テンプレート、
Map 値、Writer ライター) は IOException をスローします。
テンプレート例外
 {
 構成 cfg = 新しい構成();
 cfg.setDirectoryForTemplateLoading(新しい
 File(context.getRealPath("/templates")));
 cfg.setObjectWrapper(新しい DefaultObjectWrapper());

 BeansWrapper ラッパー = BeansWrapper.getDefaultInstance();

 TemplateHashModel staticModels = wrapper.getStaticModels();

 テンプレート一時 = cfg.getTemplate(テンプレート);

 temp.process(値、ライター);

 ライター.フラッシュ();
 }

参考文献

于 2016-01-13T19:32:57.903 に答える