11

リソースバンドルからh:outputFormat以外のコンポーネントにメッセージにパラメータを渡す便利な方法はありますか?

たとえば、これは合法です。

<h:outputFormat value="#{myBundle['parametricMessage']}">
    <f:param value="#{myBundle['someParameterValue']}"/>
</h:outputFormat>

しかし、私はこのようなボタンのためにそれを必要とします(これは機能しません):

<h:commandButton value="#{myBundle['parametricMessage']}">
    <f:param value="#{myBundle['someParameterValue']}"/>
</h:commandButton>

もちろん、ボタンの代わりにリンクを使用することもできますし、マネージドBeanのプロパティを介してリンクすることもできますが、この質問では、ボタンを使用する便利な方法を探しています...

RichFaces 3.3.3、JSF2、faceletsを使用しています。

4

3 に答える 3

14

このアプローチはどうですか?

EL式を使用すると、関数を定義できます。最初に、リソースバンドル、そのメッセージキー、およびプレースホルダーのパラメーターを受け入れ、解決されたメッセージを出力するEL式の関数を定義します。

public static String geti18nMsg(ResourceBundle bundle ,String msgKey, String paramValue ) {
    String  msgValue = bundle.getString(msgKey);
    MessageFormat   messageFormat = new MessageFormat(msgValue);
    Object[] args = {paramValue};
    return messageFormat.format(args);
}

次に、この関数を呼び出して、解決されたメッセージを<h:commandButton>:で取得します。

<h:commandButton value="#{f:geti18nMsg(myBundle , parametricMessage, someParameterValue)}"/>
于 2011-04-20T06:35:44.650 に答える
4

これを試して:

<h:commandButton>
    <h:outputFormat value="#{myBundle['parametricMessage']}">
        <f:param value="#{myBundle['someParameterValue']}"/>
    </h:outputFormat>
</h:commandButton>

ところで、これはあなたが望むことを行い、またバッキングBeanコードを書く必要をなくします。

于 2012-08-17T14:25:48.450 に答える
0

さて、私はそれについて良い答えを見つけられなかったので、質問は未解決のままになります。私が発見した良い習慣は、各リソースバンドルを表す特別なクラス(パラメトリックなものを含む)を持ち、すべてのメッセージ形成を転送し、そこでコンテキストを操作することです(たとえば、FacesContextからロケールを取得し、ResourceBundleを取得します) 、パラメータの適用など)。そして最後に、ManagedBeanからそのようなサービスクラスのシングルトンへのアクセスを提供します。

これには追加の作業が必要ですが、問題は解決され、時間の価値があります。

于 2011-04-19T23:31:25.157 に答える