NetBeans中JSF应用开发(5)

时间:2021-12-14 20:09:23
 
创建自定义验证器
如果标准的 JSF 验证器不能满足您的要求,你可以编写自己的验证器。在我们的例子中,我们将编写一个验证器来验证一个字符串是否是一个合法的 email 。要创建一个自定义验证器,需要创建一个实现 javax.faces.validator.Validator 接口的类,并在 faces-config.xml 中配置,可以通过 <f:validator> 标记来使用验证器。
1.       右键点击工程节点,然后选择 New > Java Class ,把类命名为 EmailValidator ,把这个类放在包 astrologer.validate 中,然后点击 Finish
2.       在类的声明中,实现 Validator ,如下:
public class EmailValidator implements Validator {
3.       使用提示来实现 validate 方法。
NetBeans中JSF应用开发(5)
4.       修改方法的签名,然后增加下面的代码:
    public void validate(FacesContext facesContext,
            UIComponent uIComponent, Object value) throws ValidatorException {
 
        //Get the component's contents and cast it to a String
     String enteredEmail = (String)value;
 
        //Set the email pattern string
        Pattern p = Pattern.compile(".+@.+//.[a-z]+");
 
        //Match the given string with the pattern
        Matcher m = p.matcher(enteredEmail);
 
        //Check whether match is found
        boolean matchFound = m.matches();
 
        if (!matchFound) {
            FacesMessage message = new FacesMessage();
            message.setDetail("Email not valid - The email must be in the format 
yourname
@
yourdomain.com
");
            message.setSummary("Email not valid - The email must be in the format 
yourname
@
yourdomain.com
");
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
            throw new ValidatorException(message);
        }
    }
5.       使用 Alt+Shift+F 添加必须的 import 语句。 ( 您应该选择引入 java.util.regex.Matcher , java.util.regex.Pattern and javax.faces.application.FacesMessage .)
6.       打开 faces-config.xml ,然后添加下面的代码:
     ...
    </application>
    <validator>
        <validator-id>astrologer.EmailValidator</validator-id>
        <validator-class>astrologer.validate.EmailValidator</validator-class>
    </validator>
</faces-config>
7.       打开 greeting.jsp ,然后添加 email 域:
     ...
        <p>Enter your name: <h:inputText value="#{UserBean.name}"
        id="name" required="true"/>
        <h:message for="name" /></p>
        <p>Enter your email: <h:inputText value="email"
        id="email" required="true">
            <f:validator validatorId="astrologer.EmailValidator" />
        </h:inputText>
        <h:message for="email" /></p>
        <p>Enter your birthday: <h:inputText value="#{UserBean.birthday}"
            id="birthday" required="true">
     ...
8.       运行工程,如果你输入了一个无效的 email ,你将会得到下面的错误:
NetBeans中JSF应用开发(5)
关于自定义验证器参考书上 188 页。
书:《 Java EE 5 实用教程》