あなたが示す具体的なケースでは、多分あなたはただ書くべきです
<#if myBoolean><@spring.messageText ...><#else><@spring.messageText ...></#if>
頻繁に必要な場合は、それを作成し#macro
ます。
より一般的なケースでは、式からマクロ (またはディレクティブ) を呼び出すことができないという問題があり、Spring は関数のバリエーションmessage
も提供する必要があります。私はSpring MVCを知りませんが、それを見るとうまくspring.ftl
いくspringMacroRequestContext.getMessage(code, text)
はずです。しかし、それは非常に冗長なので、おそらく次のような内容で を作成したいと思うでしょう/lib/springutils.ftl
:
<#function message code text=''>
<#if text != ''>
<#return springMacroRequestContext.getMessage(code, text)>
<#else>
<#return springMacroRequestContext.getMessage(code)>
</#if>
</#function>
次に、テンプレートで:
<#import "/lib/springutils.ftl" as su>
${myBoolean?string(su.message(...), su.message(...))}
ただし、 を使用して値を出力すると、(もちろんそれを使用する場合)${...}
の影響を受け#escape
ますが、 を使用して何かを出力すると<@...>
、エスケープされることはありません ( <@...>
/<#...>
はマークアップを出力することを意味します)。したがって、メッセージに HTML が含まれている場合${...}
、HTML マークアップをそのままユーザーに表示することになります (<
エスケープされる<
など)。そうでない限り、あなたは書いています<#noescape>${...}</#noescape>
。
(エスケープの更新: FreeMarker 2.3.24 は を使用せずに自動エスケープをサポートしており#escape
、そこで を使用します。さらに良いことに、メッセージが HTML であることを関数${su.message(...)?no_esc}
内で何らかの方法で知っている場合は、を使用できます。逃げる。)message
<#return springMacroRequestContext.getMessage(...)?no_esc>
${su.message(...)}