NetBeans中JSF应用开发(5)

创建自定义验证器
如果标准的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("[email protected]+\\.[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 
<!--
var user = "&#121;&#111;&#117;&#114;&#110;&#97;&#109;&#101;";
var domain = "&#121;&#111;&#117;&#114;&#100;&#111;&#109;&#97;&#105;&#110;&#46;&#99;&#111;&#109;";
var at = "&#x40;";
document.write(user + at + domain);
//-->
yourname
@
yourdomain.com
");
 message.setSummary("Email not valid - The email must be in the format 
<!--
var user = "&#121;&#111;&#117;&#114;&#110;&#97;&#109;&#101;";
var domain = "&#121;&#111;&#117;&#114;&#100;&#111;&#109;&#97;&#105;&#110;&#46;&#99;&#111;&#109;";
var at = "&#x40;";
document.write(user + at + domain);
//-->
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实用教程》