onlyfun.catepillar
package onlyfun.caterpillar;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
public class PasswordValidator implements Validator {
public void validate(FacesContext context,
UIComponent component,
Object obj)
throws ValidatorException {
String password = (String) obj;
if(password.length() < 6) {
FacesMessage message = new FacesMessage(
FacesMessage.SEVERITY_ERROR,
"字符长度小于6",
"字符长度不得小于6");
throw new ValidatorException(message);
}
if(!password.matches(".+[0-9]+")) {
FacesMessage message = new FacesMessage(
FacesMessage.SEVERITY_ERROR,
"密码必须包括字母和数字",
"密码必须是字母和数字组成");
throw new ValidatorException(message);
}
}
}
faces-config.xml
<validator>
<validator-id>
onlyfun.caterpillar.Password
</validator-id>
<validator-class>
onlyfun.caterpillar.PasswordValidator
</validator-class>
</validator>
使用index.jsp
<h:inputSecret value="#{user.password}" required="true">
<f:validator validatorId="onlyfun.caterpillar.Password"/>
</h:inputSecret>
附件: csdn空间4/jsf自定义验证
把所有的验证都整理出来(正则表达式的)
自定义验证的模板。
csdn空间4/PhoneValidator.java
csdn空间4/jsf自定义验证大全
package com.jsfabc.jsh.model.validator;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
import com.jsfabc.jsh.model.bo.PhoneNumber;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PhoneValidator implements Validator {
public void validate(FacesContext context, UIComponent component,
Object pvalue) throws ValidatorException {
String value = ((PhoneNumber) pvalue).getOriginal();
// "^//d+$" //非负整数(>=0)
// "^[0-9]*[1-9][0-9]*$" //正整数?
// "^((-//d+)|(0+))$ " //非正整数(<=0)
// "^-[0-9]*[1-9][0-9]*$" //负整数?
// "^-?//d+$ " //整数
// "^[A-Za-z]+$" //由26个英文字母组成的字符串
// "^[A-Z]+$" //由26个大写英文字母组成的字符串
// "^[a-z]+$ " //由26个小写英文字母组成的字符串
// "^[A-Za-z0-9]+$" //由数字和26个英文字母组成的字符串
// "^//w+$" //由数字和26个英文字母或者下划线组成的字符串
// "^//w+([-+.]//w+)*@//w+([-.]//w+)*//.//w+([-.]//w+)*$" //email地址
// "^[a-zA-Z]+://(//w+(-//w+)*)(//.(//w+(-//w+)*))*(//?//S)?$" //url
// "^ [/u4e00-/u9fa5]+$" //姓名中文 匹配中文字符
// "[1-9][0-9]{4,13}" //QQ 456789
// "//d{15}|//d{18}" //身份证号:表示15位或者18位数字的一串数字电话号码
// "^[1][3,5]+//d{9}" // 手机号码: 表示第一位是1,第二位为3或5,结尾为9位数字的一串数字
// "//d{1,3}+//.//d{1,3}+//.//d{1,3}+//.//d{1,3}" //IP地址
// "//d{4}-//d{8}|//d{4}-//d{7}|//d(3)-//d(8)" //电话 正确格式 012-87654321、0123-87654321、0123-7654321
// "[1-9]//d{5}(?!//d)" //邮编 210000
// [^//x00-//xff]" //匹配双字节字符(包括汉字在内)
Pattern mask = Pattern.compile("//d{4}-//d{8}|//d{4}-//d{7}|//d(3)-//d(8)");
Matcher matcher = mask.matcher(value);
if (!matcher.matches()) {
FacesMessage message = new FacesMessage();
message.setDetail("Phone number not valid");
message.setSummary("Phone number not valid");
message.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(message);
}
}
}
*Onlyone自定义验证
我们的验证器只能验证一种pattern(.+[0-9]+),我们希望可以在JSF页面上自订匹配的pattern,然而由于我们使用<f: validator>这个通用的验证器标签,为了要能提供pattern属性,我们可以使用<f:attribute>标签来设置,例如:
....
<h:inputSecret value="#{user.password}" required="true">
<f:validator validatorId="onlyfun.caterpillar.Password"/>
<f:attribute name="pattern" value=".+[0-9]+"/>
</h:inputSecret><p>
....
使用<f:attribute>卷标来设定属性,接着我们可以如下取得所设定的属性:
public void validate(FacesContext context,
UIComponent component,
Object obj)
throws ValidatorException {
String pattern = (String)
component.getAttributes().get("pattern");
}
173

被折叠的 条评论
为什么被折叠?



