jsf入门之自定义验证

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");
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值