1

私が読んだものによると、jsfではリソースバンドル文字列のパラメータを次のように置き換えることができます

<h:outputFormat value="#{msg['message.param2']}"> 
   <f:param value="param0" /> 
   <f:param value="param1" /> 
</h:outputFormat> 

私の問題は、primefacesタグを使用していて、次のようなの属性を使用する必要があることrequiredMessageですinputText

<p:inputText value="#{cteYDetalleMb.cteEnCaptura.nombreComercial}" style="width: 50em" required="true" 
             requiredMessage="#{msg['validacion.datosRequeridos']}" />

私のメッセージvalidacion.datosRequeridosはパラメータが必要ですが、上記の例は異なります。どうすればこれを解決できますか、使用しようとしまし<f:param>たが、機能しません。

4

2 に答える 2

1

あなたの最善の策は、次のようになるようにカスタム EL 関数を作成することです。

<p:inputText ... requiredMessage="#{my:format(msg['validacion.datosRequeridos'], 'param0', 'param1')}" />

<h:outputFormat>出力を拡張してキャプチャし、EL スコープの変数に格納するカスタム UI コンポーネントを作成することもできます。

<my:outputFormat value="#{msg['message.param2']}" var="requiredMessage"> 
   <f:param value="param0" /> 
   <f:param value="param1" /> 
</my:outputFormat> 
<p:inputText ... requiredMessage="#{requiredMessage}" />

両方のアプローチは、JSF ユーティリティ ライブラリOmniFacesof:format2()でそれぞれおよびのフレーバーで利用できます<o:outputFormat>

于 2012-10-21T11:29:59.203 に答える
0

最善の解決策ではありませんが、次の行ですべてのデフォルトの必須メッセージをオーバーライドできます: javax.faces.component.UIInput.REQUIRED = new required message. label:{0} パラメータは、inputText のラベル属性です。

または、backingbean メソッドを作成することもできます。バンドルからメッセージを読み取ります。

   <p:inputText value="#{cteYDetalleMb.cteEnCaptura.nombreComercial}" style="width: 50em" required="true" requiredMessage="#{controller.getRequiredMessage(param)}"/>

これらのヘルパー メソッドを使用して、コントローラーからメッセージを読み取ることができます。

public static String getMessage(String key) {
        FacesContext fc = FacesContext.getCurrentInstance();
        String mb = fc.getApplication().getMessageBundle();
        ResourceBundle resourceBundle = ResourceBundle.getBundle(mb, fc.getViewRoot().getLocale());
        return resourceBundle.getString(key);
    }

    public static String getMessage(String key, String params[]) {
        MessageFormat messageFormat = new MessageFormat(getMessage(key), FacesContext.getCurrentInstance().getViewRoot().getLocale());
        return messageFormat.format(params);
    }
于 2012-10-21T09:43:30.107 に答える