`
asyty
  • 浏览: 348115 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JSF / RichFace4 验证 validator,使用 groups属性

阅读更多

 

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 />
				</h:inputText>
				<rich:message for="personId" />
			</h:panelGrid>

			<h:panelGrid columns="4">
				<h:panelGrid columns="2">
					<h:outputText value="*" style="color:red" />
					<h:outputText value="重复密码:" />
				</h:panelGrid>
				<h:inputSecret id="repassword" value="#{userManageBean.repassword }">
					<rich:validator />
				</h:inputSecret>
				<rich:message for="repassword" />
			</h:panelGrid>

			<h:commandButton value="提   交" action="#{userManageBean.add}"
				style="font-size:14px; font-weight:bold;" />
		</rich:panel>
	</rich:graphValidator>
</h:form>

 edit页面代码

 

<h:form>
	<rich:graphValidator id="userValidator" value="#{userManageBean}"
		groups="org.example.web.validator.UserEditValidator">

		<h:inputHidden value="#{userManageBean.id }" />

		<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:inputText id="personId" value="#{userManageBean.personId }">
					<rich:validator />
				</h:inputText>
				<rich:message for="personId" />
			</h:panelGrid>

			</h:panelGrid>
			<h:commandButton value="保  存 " action="#{userManageBean.update}"
				style="font-size:14px; font-weight:bold;" />
		</rich:panel>
	</rich:graphValidator>
</h:form>

 UserAddValidator  UserEditValidator就是一个空的interface

 

public interface UserAddValidator {
}
public interface UserEditValidator {
}

 

上面的代码执行时,在add页面,不会执行被groups标记为UserEditValidator的验证;同样edit页面提交时也不会执行groups被标记为UserAddValidator的验证

 

转载标明源 http://asyty.iteye.com/blog/1420326

分享到:
评论

相关推荐

    jsf/jstl/MyFaces包

    在"jsf/jstl/MyFaces包"中,包含的JSTL包意味着你可以直接在JSF应用中使用JSTL的功能。这使得开发者能够将业务逻辑与视图层更好地分离,提高代码的可读性和可维护性。 将这些包放入项目的`lib`目录,或者将其配置到...

    jsf验证器与自定义验证

    例如,`required`属性确保字段不为空,`converter`属性用于转换输入值到特定类型,`validator`属性则允许我们指定一个自定义验证函数。 然而,内置验证器可能无法满足所有复杂业务需求,这就需要我们创建自定义验证...

    jsf1.2 source code

    - **数据绑定**:JSF使用EL(Expression Language)将组件属性与模型数据绑定,简化了数据的获取和设置。 - **事件处理**:JSF支持事件模型,允许组件触发和监听自定义事件。 - **国际化与本地化**:JSF内置了支持...

    JSF+HTML标签总结

    例如,`&lt;%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%&gt;`导入了JSF核心库,`prefix="f"`定义了前缀,使得我们可以使用`&lt;f:...&gt;`来调用该库中的标签。 1. `h:inputTextarea`是JSF中的文本区域组件,其...

    JSF/JDBC试题管理系统 netbeans & java DB

    综上所述,"JSF/JDBC试题管理系统 netbeans & java DB"是一个使用现代Web技术构建的教育软件,它结合了前端的JSF、CSS和JavaScript以及后端的JDBC和Java DB,通过NetBeans IDE进行开发,实现了用户登录、试题管理等...

    jsf_richface

    4. **jsf-api.jar**: JSF API库,包含了JSF框架的接口定义,供开发者在应用程序中引用和使用。 5. **jsf-facelets.jar**: Facelets是JSF推荐的视图表示技术,它是一种XML-based的模板语言,用于创建JSF组件和页面...

    第7章 JSF转换器和验证器与实例程序

    自定义验证器可以通过实现`javax.faces.validator.Validator`接口或使用`@FacesValidator`注解进行创建。 "registraction"可能是一个注册过程的示例,其中包含了对用户输入数据的验证。在注册表单中,常见的验证...

    jsf用户输入验证

    JSF允许开发者创建自己的验证器,并通过 `validator` 属性将其绑定到组件上。 ##### 创建自定义验证器: ```java @FacesValidator("emailValidator") public class EmailValidator implements Validator { @...

    jsf facelet 的用法

    xmlns:ui="http://java.sun.com/jsf/facelets"&gt; &lt;title&gt;Base Template&lt;/title&gt; &lt;/head&gt; &lt;ui:insert name="header"&gt;Default Header&lt;/ui:insert&gt; &lt;ui:insert name="content"&gt;Default Content&lt;/ui:insert&gt; ...

    JSF 转换与验证 - 利用 JSF 的转换和验证框架来确保数据模型的完整性.rar

    3. **应用验证**: 在UI组件上设置`validator`属性,指定要使用的验证器ID。 JSF还提供了预定义的验证器,如`LengthValidator`(检查长度)、`IntegerValidator`(检查是否为整数)等。这些验证器可以直接通过标签...

    jsf/RichFaces组件

    RichFaces组件简介,复合组件,日期控件,Ajax标签, 轻松实现。RichFaces组件简介,复合组件,日期控件,Ajax标签, 轻松实现。RichFaces组件简介,复合组件,日期控件,Ajax标签, 轻松实现。

    JSF自定义转换器验证器实例

    在JSF页面(`.xhtml`文件)中,你可以通过`converter`和`validator`属性指定它们,如下所示: ```html &lt;f:converter converterId="customIntegerConverter" /&gt; &lt;f:validator validatorId="ageValidator" /&gt; &lt;/h:...

    JSF(转换器+验证器)

    4. 验证器可以通过在UI组件上使用`&lt;f:validator&gt;`标签或者在字段的属性中指定`validatorId`来指定。 5. 验证失败时,可以通过`FacesMessage`向用户反馈错误信息,例如设置消息的严重性、总结和细节。 在JSF的应用中...

    jsf2.0详细文档

    JSF 2.0 对表单数据的处理机制进行了优化,包括自动表单验证、错误消息展示等功能,有效提升了用户体验。 ##### 2.5 事件处理机制 事件处理机制得到了加强,包括客户端事件处理、服务器端事件处理等,这为开发者...

    jsf2.0新特性及richface优化总结

    4. **ajaxSingle属性**: - 当设置`ajaxSingle`为`true`时,仅提交当前组件,并只针对当前组件进行验证,其他组件不受影响。与`immediate="true"`不同,后者跳过所有验证,但`ajaxSingle`仅限于Ajax请求。 5. **...

    JSF1.2自定义验证器的实现

    这可以通过在`h:inputText`或其他组件的`validator`属性中指定自定义验证器的全限定类名来完成。例如: ```xml 邮箱"&gt; &lt;f:validator validatorId="customEmailValidator" /&gt; &lt;/h:inputText&gt; ``` 在这里,`...

    JSF H 标签在HTML中的对应元素

    JSF(JavaServer Faces)是一种用于构建Web应用程序的Java框架,它提供了丰富的组件库来简化UI开发。在JSF中,H标签是一组与HTML元素相对应的UI组件,它们被设计用来创建用户界面并与服务器进行交互。这些H标签允许...

    JSF全套(JSF入门教+ LIB+ Ajax4JSF使用手册 )

    本资源包包含了JSF从入门到进阶的多个方面,包括基础教程、核心组件库(LIB)、Ajax4JSF的使用以及项目创建的指导,是学习JSF的宝贵资料。 1. **JSF入门教程**:JSF的基础知识讲解,涵盖了JSF的基本概念、架构和工作...

    jsf实现登录功能

    JSF(JavaServer Faces)是Java平台上用于构建Web应用程序的一种技术框架,它提供了一种声明式的方法来创建用户界面,并且处理与后端数据模型的交互。在这个"jsf实现登录功能"的例子中,我们将探讨如何利用JSF来构建...

Global site tag (gtag.js) - Google Analytics