创建自定义验证器
如果标准的
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(".+@.+//.[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
,你将会得到下面的错误:
关于自定义验证器参考书上
188
页。
书:《
Java EE 5
实用教程》