2011-06-19 10 views
2

カスタムバリデータを実装する新しいカスタムコンポーネントを作成しました。問題はその{0}あるカスタムバリデータにラベルを表示

the.error.message={0}\: is Invalid. 

:ここに は、私はそれを呼び出す方法です:

<p:inputText value="#{MyBean.value}" > 
    <f:attribute name="label" value="#{ResourceBean.labels['label']}"/> 

    <my:validator error="#{ResourceBean.message['the.error.message']}" 
        expression="#{ResourceBean.regExp['alphanumeric']}"/> 
</p:inputText> 

そして、ここで検証の実装です

String val = value == null ? "" : value.toString(); 

if (!val.matches(getExpression())) { 
    throw new ValidatorException(new 
       FacesMessage(FacesMessage.SEVERITY_ERROR,getErrorSummary(),null)); 

とプロパティファイルにエラーメッセージエラーメッセージのラベルに置き換えられないため、エラーメッセージとして表示されます。

{0}: is Invalid. 

これを修正する方法はありますか?

答えて

4

String messageBody = stringBuffer.toString().replaceAll("\\{0\\}", firstName); 

またはあなたの文字列のフォーマット方法で使用するために文字列トークンの交換のための適切な構文を利用することができます

私は通常、次のような何かをJSFがカバーしているように。

String message = getErrorSummary(); 
String label = component.getAttributes().get("label"); 
String formattedMessage = MessageFormat.format(message, label); 
throw new ValidatorException(new FacesException(formattedMessage)); 
2

なぜ別の動作が期待されますか?投稿されたコードでは、エラーメッセージの部分文字列{0}でトークンを明示的に置き換えている場所が表示されません。あなたはMessageFormat APIを使用する必要が

String.format("%s: is Invalid.", "token");