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

JSF2 使用bean验证

    博客分类:
  • JSF2
阅读更多

 验证用户的输入来维护数据的完整性是应用程序逻辑的重要部分。在最简单的应用程序中,验证可可以发生在不同的层,如在前面的章节中的guessnumber例子程序中显示的那样。在那个例子程序中,应用程序在表现层验证用户输入的是数字(h:inputText标签),在业务层验证用户输入是否在有效的范围内。
    JavaBean验证(bean验证)是一个新的验证模型,是Java EE 6的一部分。通过以annotation的形式给如后台bean这样的JavaBean组件的字段、方法或类添加约束来支持bean验证模型。约束可以是内建的或用户定义的。用户定义的约束叫做客户约束。一些内建的约束位于javax.validation.constraints包中。下表列出了所有的内建的约束。
  

                                

约束

                        
                                

描述

                        
                                

例子

                        
                                

@AssertFalse

                        
                                

字段或属性的值必须是false

                        
                                

@AssertFalse

boolean     isUnsupported;

                        
                                

@AssertTrue

                        
                                

字段或属性的值必须是true

                        
                                

@AssertTrue

boolean  isActive;

                        
                                

@DecimalMax

                        
                                

字段或属性的值必须是decimal,并且小于或等于约束中给出的值

                        
                                

@DecimalMax(“30.00”)

BigDecimal  discount;

                        
                                

@DecimalMin

                        
                                

字段或属性的值必须是decimal,并且大于或等于约束中给出的值

                        
                                

@DecimalMin(“5.00”)

BigDecimal   discount;

                        
                                

@Digits

                        
                                

字段或属性的值必须是指定范围内的数字。元素integer指定了数字的最大的整数位数,fraction元素指定了最大的小数位数

                        
                                

@Digits(integer=6,    fraction=2)

BigDecimal   price;

                        
                                

@Future

                        
                                

字段或属性的值必须是未来的日期

                        
                                

@Future

Date   eventDate;

                        
                                

@Max

                        
                                

字段或属性的值必须是小于或等于指定值的整数

                        
                                

@Max(10)

int quantity;

                        
                                

@Min

                        
                                

字段或属性的值必须是大于或等于指定值的整数

                        
                                

@Min(5)

int quantity;

                        
                                

@NotNull

                        
                                

字段或属性的值必须非空

                        
                                

@NotNull

String   userName;

                        
                                

@Null

                        
                                

字段或属性的值必须为null

                        
                                

@Null

String    unusedString;

                        
                                

@Past

                        
                                

字段或属性的值必须是过去的日期

                        
                                

@Past

Date birthday;

                        
                                

@Pattern

                        
                                

字段或属性的值必须符合regexp元素定义的正则表达式

                        
                                

@Pattern(regexp=”\\(\\d{3}\\)d{3}-\\d{4}”)

String     phoneNumber;

                        
                                

@Size

                        
                                

字段或属性的size必须在指定的范围内。如果字段或属性是String类型,那么size指的是字符串的size;如果字段或属性是Collection,size指的是Collection的size;如果字段或属性是Map,size指的是Map的size。如果字段或属性是数组,size指的是数组的length。可以使用max或min元素中的一个或两个来自是范围。

                        
                                

@Size(min=2,   max=240)

String   briefMessage;

                        

    在下面的例子中,使用了内建的@NotNull约束:

  1. public class Name {
  2.         @NotNull
  3.         private String firstname;
  4.         @NotNull
  5.         private String lastname;
  6. }
复制代码

    也可以将多个约束放在同一个字段或属性上,如下例所示:

  1. public class Name {
  2.         @NotNull
  3.         @Size(min=1, max=16)
  4.         private String firstname;
  5.         @NotNull
  6.         @Size(min=1, max=16)
  7.         private String lastname;
  8. }
复制代码

    下面的例子显示了怎样在一个方法上使用一个用户定义的约束来检查预先定义的email地址模式:

  1. @ValidEmail
  2. public String getEmailAddress() {
  3.         return emailAddress;
  4. }
复制代码

    对于内建的约束,都有有效的默认的实现。对于用户定义的约束(客户约束)则需要相应的实现类。上面例子中的@ValidEmail用户约束就需要相应的实现类。
    任何验证失败都会被优雅的处理并能够被h:messages标签显示。任何包含Bean验证组件的后台bean都会自动的得到放在JavaServer Faces应用程序的web页面的字段上的约束。
    更多关于使用验证约束的信息见“验证持久化的字段和属性”一节。
验证null字符串和空字符串
    Java编程语言会区分null和空字符串。空字符串是一个长度为0的字符串实例。null字符串表示根本没有任何值。
    空字符串用""表示。是一个包含0个字符的字符数组。null字符串用null表示。null字符串表示没有字符串实例。
    表示为JavaServer Faces文本组件(如inputText)的后台bean的元素会被JavaServer Faces实现使用空字符串初始化。
    验证不强制用户输入的字段会是一个问题。看看下面的例子,当testString是一个bean的变量,会使用用户的输入来设置该变量,并且用户对这个字段的输入并不是强制的:

  1. if (testString.equals(null)) {
  2.         doSomething();
  3. } else {
  4.         doAnotherThing();
  5. }
复制代码

    默认情况下,即使用户没有输入任何值,doAnotherThing方法仍然会被调用,因为testString元素被初始化为空字符串。
要使Bean验证模型按照我们设想的工作,必须在web布署描述符(web.xml)中将环境参数

  1. javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL设置为true:
  2. <context-param>
  3. <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
  4. <param-value>true</param-value>
  5. </context-param>
复制代码

    这个参数使得JavaServer Faces实现将空字符串作为null对待。假设在另一个地方有一个@NotNull约束,表明必须要有用户输入。在这种情况下,空字符串会通过验证。但是如果将这个环境参数设置为true了,那么运行时传递给bean验证的后台bean的属性就是null值,会导致通不过验证。

分享到:
评论

相关推荐

    JSF2学习用范例

    该范例为JSF2基础范例工程,分10类.适合初学者学习。 在weblogic9 tomcat5-7 JDK1.5测试通过 weblogic9和tomcat5需要el.jar支持,已经在文件夹中标明,只需放入lib目录下即可 需要注意的是weblogic9和tomcat5支持的...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版) 1/2

    使用为模型数据验证设立的新的JSR-303bean验证标准。创建可以使用Ajax的定制用户界面组件。使用定制的非用户界面组件来扩展JSF。管理安全、可访问性、国际化和本地化。学会使用Liferay的JSF团队领导开发的JSF和...

    JSF基础教程 简体中文

    JSF 使用 Bean 来达到逻辑层与表现层分离的目的,Bean 的管理集中在组态档案中,您只要修改组态档案,就可以修改 Bean 之间的相依关系。 o Backing Beans o Beans 的组态与设定 o Beans 上的 List, Map 数据转换与...

    整合jsf hibernate spring实例

    部门人员一对多的CRUD操作 hibernate: 管理实体关系映射 spring:数据源配置与获得session IOC依赖注入 和 AOP ...jsf : backing bean的操作 jsf 标签应用 jsf 信息国际化以资源绑定 jsf 表单验证 jsf 导航设定

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    第二部分详细讲解了jsf ri、jta、jndi、rmi、jms、javamail、ejb 3的session bean、message driven bean、jpa、jax-ws 2、jaas等java ee知识,这部分知识以jsf+ejb 3+jpa整合开发为重点,通过使用netbeans ide工具...

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版).part1

    使用为模型数据验证设立的新的JSR-303bean验证标准。创建可以使用Ajax的定制用户界面组件。使用定制的非用户界面组件来扩展JSF。管理安全、可访问性、国际化和本地化。学会使用Liferay的JSF团队领导开发的JSF和...

    petstore:一个解释 JSF 特性使用的启动示例项目

    该项目试图涵盖 JSF 2 规范的主要功能。 使用的字段是: 托管 bean,在它们不同的范围内(@ApplicationScoped、@SessionScoped、@ViewScoped、@RequestScoped) 在 JSF 中从视图到视图的导航 EL 语言在其 2.2 版本...

    jsf2-jsp-portlet-3.1.3-ga4.zip

    krasa-jaxb-tools.zip,用于生成bean验证注释的jaxb插件(jsr-303)和用于生成bean验证注释的替换基元类型xjc/jaxb插件(jsr-303)和替换基元类型

    JSF+EJB示例

    这是一个jsf+ejb的入门级程序,对于刚开始接触这两门技术的人来说,会有很大的帮助。...同时,在JSF项目中使用EJB提供的借口来对底层数据进行操作。在JSF中,包括了对数据的增删改查,简单验证等...

    java server face 教程

    JSF 使用 Bean 来达到逻辑层与表现层分离的目的,Bean 的管理集中在组态档 案中,您只要修改组态档案,就可以修改 Bean 之间的相依关系。 o Backing Beans o Beans 的组态与设定 o Beans 上的 List, Map • 数据转换...

    exemplo-parse-java:通过MVC和JSF通过Java使用Parse API的示例。 在Senac技术学院的Internet编程2学科,分析和系统开发课程中进行了演示

    细节使用Maven框架进行打包的项目用于与JSON交互的 : 演示MVC分离各层的方法如下: 第一层:XHTML JSF +托管Bean 第二层:RN类(稍后可能作为服务公开) 第三层:BD类(负责持久性;在这种情况下,在Parse中) 您将...

    Spring in Action(第二版 中文高清版).part2

    16.4.3 在JSF页面中使用Spring Bean 16.4.4 在JSF中暴露应用程序环境 16.5 Spring中带有DWR的支持Ajax的应用程序 16.5.1 直接Web远程控制 16.5.2 访问Spring管理的Bean DWR 16.6 小结 附录A 装配Spring A.1 ...

    jsf:易百教程网-JSF教程源代码(http

    在本JSF教程中,包括JSF的所有主题,如功能,示例,验证,bean验证,托管bean,引用托管bean方法,facelets等 初步条件 在学习JSF之前,您必须拥有Java编程语言的基础知识,还需要知道基本HTML等尖端知识。 读者 ...

    JSR-303接口标准和参考实现

    整合jsf2 bean验证需要的jar包,j2ee6规范jsr303 hibernate-validator-4.2.0.Final validation-api-1.0.0.GA

    Spring in Action(第2版)中文版

    16.4.3在jsf页面中使用springbean 16.4.4在jsf中暴露应用程序环境 16.5spring中带有dwr的支持ajax的应用程序 16.5.1直接web远程控制 16.5.2访问spring管理的beandwr 16.6小结 附录a装配spring a.1下载spring ...

    teotstag:JSF 2标签和范围-开源

    标签:Include Cache:缓存包含的JSF内容以提高性能懒加载:基于ajax的页面片段的懒加载验证组:多组件和跨组件验证范围:发布范围:通过JSF POST请求保持活动状态,通过重定向而终止(PRG)的生存期比View长,但比...

    Spring in Action(第二版 中文高清版).part1

    16.4.3 在JSF页面中使用Spring Bean 16.4.4 在JSF中暴露应用程序环境 16.5 Spring中带有DWR的支持Ajax的应用程序 16.5.1 直接Web远程控制 16.5.2 访问Spring管理的Bean DWR 16.6 小结 附录A 装配Spring A.1 ...

    jsf-spa:JSF +单页应用程序

    而无需刷新整个页面页面可以刷新和加书签应用服务器处理身份验证/授权向后兼容可在不使用Javascript的情况下工作####图书馆野蝇8.1 Hibernate4.3.5 JSF 2.2 History.js jQuery的2.1.4笔记使用HttpSessionListener...

    GooglePlay:我们使用jsf完成的项目分配

    GooglePlay 这是我们使用Jsf,SQL,JAVA,HTML,CSS所做的Google Play工作。 A.... 要为权限部分user_name分配admin,请执行以下操作:admin;... Java Bean验证程序已实现。 文件操作完成。 分页已完成。

Global site tag (gtag.js) - Google Analytics