0

以下のコード スニペットがあり、 <@spring.message "name"/> からの出力をマクロ (プレースホルダー パラメーター) のパラメーターとして渡したいと考えています。

以下で試したように直接提供してもうまくいきませんでした。

<td class="rightCell"><b><@spring.message "name"/>:</b></td>
<td class="leftCell"><@createUserInputItemModifiedv2 "name", "name", "text", @spring.message "name" /></td>

<#macro createUserInputItemModifiedv2 attributeName, errorMessageName, inputType, placeholder>
   <input class="edit" type="${inputType}" id="${attributeName}" name="${attributeName}" placeholder="${placeholder}" value="${user[attributeName]!}"/><br/>
   <#if validationErrors?? && validationErrors[attributeName]??>
      <div class="errorMessage" id="${errorMessageName}Error">
         ${validationErrors[attributeName]!}
      </div>
    </#if>
</#macro>
4

1 に答える 1

1

これspring.messageは、FreeMarker マクロだけでなく、FreeMarker 関数でもある必要があるためです。マクロには戻り値がないため (副作用として出力ライターに直接出力される可能性があります)、式が必要な場所でマクロを呼び出すことはできません。とにかく...今これを回避する方法。Spring のソース コードを見ると、おそらくこれでうまくいくでしょう。

<#function message code><#return springMacroRequestContext.getMessage(code)></#function>

utils.ftlまたは何かを (auto-)#importとして作成し、テンプレートでu実行できます。<@createUserInputItemModifiedv2 ..., u.message("name")>(実際には、もっと便利にできるので、単に書き込みmsg.nameやいいねをすることができますが、ここでは触れません。)

springMacroRequestContextただし、その内容に関して下位互換性が保証されているかどうかはわかりません。したがって、最終的にこれは春に修正される必要があります。

于 2013-07-18T12:41:47.347 に答える