7

メールアドレスが無効の場合、表示されるメッセージは「無効なメールです。無効なメールです。」です。メッセージには、要約と詳細の2つの部分があることを私は知っています。これらの両方が必要ですが、それぞれに異なる情報が必要です。メッセージを変更して、代わりに「無効な電子メール:有効な電子メールアドレスを入力してください」と表示するにはどうすればよいですか?

<p:messages showDetail="true" autoUpdate="true" closable="true" />
<h:panelGrid columns="2">
    <h:outputText value="#{label.email}: *" />
    <p:inputText required="true" value="#{userWizard.emailAddress}"
        validatorMessage="#{label.invalidEmail}" label="#{label.email}">
        <f:validateRegex pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$">
        </f:validateRegex>
    </p:inputText>
</h:panelGrid>  
4

2 に答える 2

11

validatorMessageこれは(converterMessageまたは)では不可能requiredMessageです。値は、要約と詳細の両方として使用されます。

FacesMessage代わりに、両方の部分を使用して自分で構築できるカスタムバリデーターを自家栽培する必要があります。メッセージの詳細を表すlabel.emailaの横にあるとすると、次のようになります。label.email_detail

@FacesValidator("emailValidator")
public class EmailValidator implements Validator {

    private static final Pattern PATTERN = Pattern.compile("([^.@]+)(\\.[^.@]+)*@([^.@]+\\.)+([^.@]+)");

    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        if (value == null || ((String) value).isEmpty()) {
            return; // Let required="true" handle.
        }

        if (!PATTERN.matcher((String) value).matches()) {
            String summary = context.getApplication().evaluateExpressionGet(context, "#{label.email}", String.class);
            String detail = context.getApplication().evaluateExpressionGet(context, "#{label.email_detail}", String.class);
            throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, detail));
        }
    }

}

(私は世界支配のより良い準備のために電子メールregexpを適応させたことに注意してください。中国語、ヘブライ語、キリル文字などの非ラテン文字は、2010年の新しいIANA決定以降、ドメイン名、したがって電子メールアドレスでも許可されています)

その後、として使用されます

<p:inputText ... validator="emailValidator" />
于 2012-11-20T11:55:16.550 に答える
5

ここのドキュメントによると:http://www.primefaces.org/docs/vdl/3.4/primefaces-p/messages.html

あなたはそのようなことをすることができます:

<p:messages showSummary="true" showDetails="true" />

それらを分解することもできます...スタイリングのために:

<p:messages showSummary="false" showDetails="true" />
<p:messages showSummary="true" showDetails="false" />

ただし、validatorMessageを使用して2つのエラーメッセージを定義することはできません。

http://www.primefaces.org/docs/vdl/3.4/primefaces-p/inputText.html

于 2012-11-20T06:50:19.247 に答える