UIにさまざまなテキストを表示するためにリソースバンドルを使用する必要があるユースケースがあります。これらのリソースバンドルエントリの一部はパラメータを取ります(例:{0})。これらにはh:outputFormatを使用しますが、それだけでは不十分な場合があります。
例えば
someMessage=Display this message with param {0}
リソースバンドル内。
xhtmlに表示するには、通常、次のようにします。
<h:outputFormat value="#{msg['someMessage']}"><f:param value="#{someBean.value}"/></h:outputFormat>
これは単純なケースではうまく機能しますが、より複雑なユースケースでは十分ではありません。たとえば、commandLinkの「title」属性で上記のリソースバンドルエントリを使用する場合は、次のようになります。
<h:commandLink action="logout" title="#{msg['someMessage']}">
<f:param value="#{someBean.value}" />
<h:graphicImage library="images" name="image.png" />
</h:commandLink>
これは機能しません。私も試しました:
<h:commandLink action="logout">
<f:attribute name="title">
<h:outputFormat value="#{msg['someMessage']}"><f:param value="#{someBean.value}"/></h:outputFormat>
</f:attribute>
<h:graphicImage library="images" name="image.png" />
</h:commandLink>
f:attibuteは子を許可しないため、これも機能しません。
これを回避するためのハックがある場合でも(たとえば、primefacesからホバーコンポーネントを使用する場合)、パラメーター化されたメッセージを必要とする可能性のある他のフィールドがあります。
JSFコンポーネントの非値フィールドで引数を取るMessageFormatを使用する方法を知っている人はいますか?