0

JSF2マークアップを使用して、プロパティパラメータをボタン値に渡すことは可能ですか? タグは知って<h:outputFormat>いますが、ボタンにする必要があります。私は以下のようなものにもっと興味があります。

私のXHTMLコード:

<h:button value="#{webCommonMessages['notifications']}" outcome="...">
    <f:param value="1"/>
</h:button>

私の webCommonMessages バンドル:

notifications=Notifications available: ({0})

これはもちろん機能しませんが、解決策/回避策はありますか?

4

1 に答える 1

2

残念ながら、JSF には必要なものを取得するための組み込み機能が用意されていないため、基本的に次の 3 つの方法があります。

  1. リソースバンドルからh:outputFormat以外のコンポーネントへのメッセージへのパラメーターの受け渡しで説明されているように、置換された値を取得するためのカスタム EL 関数を作成します。
  2. JSF コンポーネントの値以外の属性を持つパラメーター化された MessageFormat を使用する方法または
  3. BalusC によって維持されているユーティリティ ライブラリOmniFaces<o:outputFormat>で提案されているソリューションを、2 番目の方法で効果的に組み込むコンポーネントに従って使用します。

したがって、私が個人的に強くお勧めする 3 番目の方法を使用している場合、解決策は基本的に次のとおりです。

<o:outputFormat value="#{webCommonMessages['notifications']}" var="t">
    <f:param value="1" />
</o:outputFormat>
<h:button value="#{t}" outcome="..." />

JSF プロジェクトで OmniFaces を使用するのはとてつもなく簡単で、そのホームページで説明されていますが、繰り返しになりますが、その jar を Web アプリケーションの /WEB-INF/lib フォルダーに追加 (または Maven 依存関係として含める) し、適切な名前空間を追加するだけです。のように、facelet ビューでxmlns:o="http://omnifaces.org/ui".

私の最初の答えが間違っていたことも付け加えておく価値があります。JSF をネスト<h:outputFormat>すると必要な HTML 要素がレンダリングされると誤って想定していました。それでも、たとえば によって JSF で提供されるプレーンなナビゲーション リンクには当てはまり、次の<h:link>ように使用されます。

<h:link outcome="...">
    <h:outputFormat value="#{webCommonMessages['notifications']}">
        <f:param value="1" />
    </h:outputFormat>
</h:link>

<f:param>入れ子になった<h:button>ものがリソースバンドルからのメッセージに組み込まれると誤って想定しました。生成された URL にクエリ パラメータを追加するために使用されます。<h:outputFormat>代わりに、ボタン内にネストされた目的のためにタグを使用する必要があるため、そのvalue属性を指定しません。

<h:button outcome="...">
    <h:outputFormat value="#{webCommonMessages['notifications']}">
        <f:param value="1" />
    </h:outputFormat>
</h:button>
于 2013-07-30T12:31:16.147 に答える