あなたが示す具体的なケースでは、多分あなたはただ書くべきです
<#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(...)}