2

私はこれを歩き回っていますが、ドキュメントやサンプルコードを見つけることができませんでした.

序章:

このキー/値マップを持つ ftl ページがあります。

  • roomType.description["ES"] = "テキスト"
  • roomType.description["EN"] = "テキスト"
  • roomType.description["PT"] = "テキスト"

質問:

マップをパラメーターとして freemarker マクロに渡す方法は?

コード例:

マクロ宣言

<#macro descriptionMacro firstLang descriptionText>
    <#-- SOME CODE -->
    <textarea>
        <#if descriptionText[firstLang]??>
            ${descriptionText[firstLang]?trim}
        </#if>
    </textarea>
    <#-- SOME OTHER CODE -->
</#macro>

マクロ呼び出し (動作しない)

<@descriptionMacro firstLang="es" descriptionText=roomType.description/>
4

1 に答える 1

3

あなたのコードに見られる唯一の問題は、マップのキーが大文字 (「EN」、「ES」、「PT」) であり、小文字のキー「es」を使用してテンプレートの値にアクセスしようとすることです。 "。

Mapそれを除いて、 as パラメータを使用する制限はありません。

たとえば、次のマップを指定します。

  Map<String, String> description = new HashMap<>();
  description.put("en", "Some text");
  description.put("es", "Testo");
  description.put("fr", "Texte");

  Map<String, Object> data = newHashMap();
  data.put("description", description);

  Template template = getTemplate();
  Writer out = new StringWriter();
  template.process(data, out);

そして、このテンプレート:

<#macro printDescription lang data>
    Description = ${data[lang]}
</#macro>
<@printDescription lang="es" data=description />

出力は次のとおりです。

Description = Testo
于 2013-04-17T11:27:00.740 に答える