`
yuzhi2217
  • 浏览: 36590 次
  • 性别: 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值,会导致通不过验证。

分享到:
评论

相关推荐

    JSF 资源 managed bean 课件

    - **使用EL表达式引用Bean**:通过`#{beanName.propertyName}`语法可以在JSF页面中引用Bean的属性。 - **数据绑定**:可以直接将表单字段与Bean的属性进行绑定,从而简化数据处理流程。 - **事件监听**:可以定义...

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

    在"JSF转换器和验证器"这一主题中,学习者将接触到如何配置和使用这两个组件,以及如何在JSF应用程序中进行错误处理和用户反馈。这包括在XHTML视图中声明转换器和验证器、在 Managed Bean 中定义业务逻辑,以及如何...

    jsf用户输入验证

    ### JSF用户输入验证 #### 一、JSF验证器概览 在JavaServer Faces (JSF) 中,用户输入验证是一项重要的功能,用于确保客户端提交的数据满足特定的要求。这不仅可以提升应用程序的安全性,还可以提高用户体验,通过...

    采用 JSF +后台Bean开发 大学学生管理系统

    3. **生命周期管理**:JSF有明确的组件生命周期,包括初始化、应用请求值、处理验证、更新模型值、调用应用逻辑和渲染响应等阶段。 4. **可扩展性**:JSF允许开发者自定义组件、渲染器和事件处理器,以满足特定需求...

    JSF2新特性以及配置

    5. **Managed Bean注解支持**:JSF2支持使用`@ManagedBean`和`@ViewScoped`等注解来声明和管理Bean,简化了代码并增强了可读性。 6. **CDI集成**:JSF2与Java EE的Contexts and Dependency Injection (CDI)框架集成...

    jsf验证器与自定义验证

    博客文章可能还涉及了如何在JSF页面(`.xhtml`)中使用自定义验证器,以及如何在`faces-config.xml`中全局注册。通常,自定义验证器的使用方式如下: ```xml &lt;h:inputText value="#{bean.property}"&gt; ``` 或者在...

    jsf中文使用教程jsf中文使用教程

    2. **Managed Bean**:Managed Bean是JSF中的核心组件,用来存储和处理数据。 3. **Navigation Handler**:负责处理页面间的跳转。 4. **Converter和Validator**:Converter转换数据类型,Validator验证用户输入。 ...

    jsf 登录验证程序

    在JSF中,这些表单字段可以映射到后台Bean的属性,以便于数据绑定和验证。 3. **JSF组件**:JSF提供了一系列内置的UI组件,如`h:inputText`用于文本输入,`h:commandButton`用于提交表单。在JSFLoginExample中,...

    详细的JSF的使用步骤

    JSF的核心理念是组件化,它提供了一个模型-视图-控制器(MVC)架构,允许开发者使用预定义的组件、事件处理和后台bean来构建功能丰富的Web应用程序,而无需深入理解HTTP请求/响应的底层细节。 1. **JSF框架概述** ...

    JSF配置以及简单的登陆验证

    在本文中,我们将深入探讨如何配置JSF环境以及实现一个简单的登录验证。 首先,我们需要在Apache Tomcat服务器上创建一个新的动态Web项目。在项目设置中,选择JSF作为技术栈,并指定所需的JSF版本。这将自动下载和...

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

    在JSF中,转换器和验证器扮演着至关重要的角色,它们允许我们对用户输入进行处理和验证,确保数据的质量和一致性。本实例将带你深入理解如何在JSF中创建自定义的转换器和验证器。 首先,我们来了解**转换器...

    JSF2入门视频+源代码教程

    通过使用JSF2,开发者能够构建出声明式和可重用的UI组件,同时利用其事件处理机制、生命周期管理和数据验证功能。 **视频教程可能涵盖的内容:** 1. **JSF2基础**:讲解JSF的基本概念,如生命周期、组件模型、视图...

    jsf标签使用文档

    JSF提供了丰富的功能,包括表单处理、验证、国际化等,并通过一套强大的组件模型支持网页组件的创建与管理。本文档将详细介绍JSF中的一些核心标签及其使用方法。 #### 二、JSF页面配置与初始化 在使用JSF开发应用...

    jsf2+spring sample

    2. **生命周期管理**:JSF2具有请求处理的生命周期,包括初始化、应用请求值、处理验证、更新模型值、调用应用事件和渲染响应等阶段,简化了开发流程。 3. **FacesContext**:它是JSF2的核心,提供了与当前请求相关...

    JSF框架使用入门(初学jsf必备)

    在这个入门示例中,我们看到了如何使用JSF组件创建用户界面,以及如何通过受管Bean处理业务逻辑。同时,`faces-config.xml`文件的使用展示了如何配置导航规则,实现页面间的跳转。通过这个基础,你可以进一步学习JSF...

    JSF2 规范的标准参考实现

    8. **错误处理和验证**:JSF 2改进了错误处理和验证机制,允许开发者自定义错误消息,同时支持客户端和服务器端验证。 **Mojarra作为JSF 2的参考实现** Mojarra是JSF规范的主要实现之一,它完全符合JSF 2的标准。`...

    jsf的初步使用(包括jsf框架的引入、用户登录、自定义表单验证、valueChangeEvent值变更事件处理做的级联下拉框,内有jsf的jar包)

    本教程将带你深入了解JSF的基础使用,包括框架的引入、用户登录实现、自定义表单验证以及通过`valueChangeEvent`处理级联下拉框。 **一、JSF框架的引入** 在Java EE项目中引入JSF框架,首先需要在`pom.xml`或`build...

    jsf 用户登陆界面

    在JSF中,用户登录界面是常见的功能模块,用于验证用户的身份。下面将详细讲解如何在JSF中创建一个用户登录界面。 1. **JSF架构简述** JSF是一种组件化的MVC(Model-View-Controller)框架,它提供了丰富的UI组件...

    JSF框架使用入门

    **JSF(JavaServer Faces)框架使用入门** JavaServer Faces(JSF)是Java平台上的一个用于构建Web应用程序的MVC(Model-View-Controller)框架。它为开发者提供了丰富的组件库,简化了用户界面的开发,使得后端...

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

    本文将深入探讨如何在JSF 1.2中创建和使用自定义验证器。 自定义验证器是JSF中的一个重要特性,它允许开发者扩展内置的验证功能,以满足项目中特殊的业务需求。自定义验证器通常是一个实现了`javax.faces.validator...

Global site tag (gtag.js) - Google Analytics