日期:2014-05-16 浏览次数:20501 次
?
JSF验证的基础用法,官方文档有一些代码说明,可以自己搜一下,或者看下面的链接
http://www.mastertheboss.com/web-interfaces/293-jsf-validation-tutorial.html?showall=1
?
本篇略过基础的annotation标签和JSF自定义验证的内容,主要简单说一下用jsf验证时遇到的问题,网上关于JSF比较细节的资料或者例子比较少,查了半天才发现解决方法。
?
应用场景:
自定义了一个Manage Bean,即action类,对数据进行增删改查
添加数据的JSF页面:有个空表单需要在提交时验证数据
编辑数据的JSF页面:有个编辑数据的表单,提交时需要验证
?
问题:两个表单要验证的字段不一样,有些数据不需要验证,有些数据需要多个字段交叉验证
解决: 主要用Groups属性,将要验证的字段分类
?
抽取的部分代码示例:
?
ManageBean
?
import java.io.Serializable;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import org.example.ejb.service.UserService;
import org.example.web.validator.UserAddValidator; //自己建一个空的interface,用于定义group
import org.example.web.validator.UserEditValidator; //自己建一个空的interface
@Named("userManageBean")
@RequestScoped
public class UserManageBean implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
@Size(min=2, max=12, message="长度必须大于2,小于12")
private String userName;
@Size(min=6, max=12, message="长度必须大于6,小于12")
private String password="";
@Size(min=6, max=12, message="长度必须大于6,小于12")
private String repassword="";
@Pattern(regexp="^(\\d{18,18}|\\d{15,15}|(\\d{17,17}[x|X]))$", message="身份证格式错误")
private String personId;
//用于后台验证的service
@EJB
private UserService userService;
public UserManageBean() {
}
@AssertTrue(message = "密码不一致!", groups=UserAddValidator.class)
public boolean isPasswordsEquals() {
return password.equals(repassword);
}
//添加用户时,身份证必须未存在,忽略具体的check代码,下同
@AssertTrue(message = "该用户身份证已存在!", groups=UserAddValidator.class)
public boolean isPersonIdExsists() {
return userService.checkPersonId(personId);
}
//添加用户时,账号必须不存在
@AssertTrue(message = "该用户账号已存在!", groups=UserAddValidator.class)
public boolean isUserNotExsists() {
return userService.checkUserName(userName);
}
//编辑用户时,不能把账号改成别人已有的身份证
@AssertTrue(message = "该用户身份证已存在!", groups=UserEditValidator.class)
public boolean isPersonIdConflig() {
return userService.checkPersonId(id, personId);
}
public String update() {
XXXXXXXXX
return SUCCESS;
}
public String add() {
XXXXXXXXXX
return SUCCESS;
}
。。。。。。一堆getter setter。。。。
}
?
add页面的表单代码
?
<h:form>
<rich:graphValidator id="userValidator" value="#{userManageBean}"
groups="org.example.web.validator.UserAddValidator">
<rich:panel header="用户添加" width="100%">
<rich:message for="userValidator" />
<h:panelGrid columns="3">
<h:panelGrid columns="2">
<h:outputText value="*" style="color:red" />
<h:outputText value="帐户:" />
</h:panelGrid>
<h:inputText id="userName" value="#{userManageBean.userName }">
<rich:validator />
</h:inputText>
<rich:message for="userName" />
</h:panelGrid>
<h:panelGrid columns="3">
<h:panelGrid columns="2">
<h:outputText value="*" style="color:red" />
<h:outputText value="密码:" />
</h:panelGrid>
<h:inputSecret id="password" value="#{userManageBean.password }">
<rich:validator />
</h:inputSecret>
<rich:message for="password" />
</h:panelGrid>
</h:panelGrid>
<h:panelGrid columns="3">
<h:panelGrid columns="2">
<h:outputText value="*" style="color:red" />
<h:outputText value="身份证:" />
</h:panelGrid>
<h:inputText id="personId" value="#{userManageBean.personId }">
<rich:validator /&g