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方法。
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 = "yourname";
var domain = "yourdomain.com";
var at = "@";
document.write(user + at + domain);
//-->
yourname
@
yourdomain.com
");
message.setSummary("Email not valid - The email must be in the format
<!--
var user = "yourname";
var domain = "yourdomain.com";
var at = "@";
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,你将会得到下面的错误:
关于自定义验证器参考书上188页。
书:《Java EE 5实用教程》