- 浏览: 935477 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (229)
- spring (20)
- myBatis (1)
- javase (31)
- 设计模式 (1)
- jQuery EasyUI (4)
- 编程工具 (8)
- Hibernate (3)
- tomcat (3)
- js (27)
- Jboss (2)
- dom4j (1)
- 操作系统 (5)
- 数据库 (26)
- springmvc (6)
- 程序人生 (5)
- JDBC (1)
- android (6)
- groovy (2)
- memcached (11)
- Nginx (8)
- maven (7)
- javaEE (13)
- jquery (3)
- linux (4)
- 单元测试 (6)
- 算法 (6)
- resin 服务器 (5)
- 缓存 (8)
- slf4j日志 (1)
- resin 服务器;log4j (2)
- 性能调休 (25)
- 网络编程 (10)
- 多线程 (9)
- json (1)
最新评论
-
lliiqiang:
主要原因还是因为html格式太复杂多变了。很难过滤所有的危险代 ...
java 防止xss攻击 -
u011670948:
Mustache模板遍历输出数据 -
u011670948:
Mustache模板遍历输出数据 -
masuweng:
spring @Autowire 的注解默认是按类型注入bean -
masuweng:
spring @Autowire 的注解默认是按类型注入bean
转:http://xiangtui.iteye.com/blog/970951,
验证数据是应用程序生命周期中一个常见的任务,例如,在应用程序的表示层,你可能想验证用户在文本框中输入的字符数最多不超过20个,或者想验证用户在数字字段输入的字符只能是数字。
开发人员在应用程序的各层中通常使用相同的验证逻辑,或者将验证逻辑放在数据模型中。
Bean验证(JSR 303)使验证变得更简单了,减少了重复,错误和凌乱,Bean验证提供了一个标准的验证框架,在框架中相同的验证集可以在应用程序的所有层之间共享。
Bean验证提供了一个框架验证遵循JavaBean规范编写的Java类,你可以使用 注解指定一个JavaBean上的约束,你可以注解一个JavaBean类、字段或属性,你也可以通过XML描述符扩展或覆盖这些约束,验证类验证每个约 束时,你要指定那个验证类用于给定的约束类型。
例如,下面是通过Bean验证注解声明一些约束
public class Address{
@NotNull @Size(max=30)
private String addressline1;
@Size(max=30)
private String addressline2;
...
public String getAddressline1(){
return addressline1;
}
public void setAddressline1(String addressline1) {
this.addressline1=addressline1;
}
...
}
@NotNull注解指定了注解元素addressline1绝不能为空,@Size注解指定注解元素addressline1和addressline2决不能大于指定的长度(30个字符)。
验证Address对象时,addressline1的值传递给为@NotNull约束定义的验证类,同时还要传递给为@Size约束定义的验证类,addressline2的值也要传递给为@Size约束定义的验证类。
@NotNull
和@Size约束内置于Bean验证框架中,因此你不需要为它们定义验证类,但你可以在内置约束上添加自己的约束,那时就需要定义自己的验证类了。例如,
你可以定义如下的@ZipCode约束:
@Size(min=5,max=5)
@ConstraintValidator(ZipcodeValidator.class)
@Documented
@Target({ANNOTATION_TYPE, METHOD,?FIELD})
@Retention(RUNTIME)
public @interface ZipCode{
String message() default "Wrong zipcode";
String[] groups() default {};
}
然后你可以在类、字段或属性上象其它约束定义那样定义@ZipCode约束,如:
public class Address {
...
@ZipCode
private String addressline3;
public String getZipCode(){
return zipCode;
}
public void setZipCode(String zipCode){
this.zipCode=zipCode;
}
Address对象验证时,addressline3的值传递给 ZipcodeValidator类进行验证,注意约束定义包括另一个约束:@Size(min=5, max=5),这意味着由@ZipCode注解注解的元素必须恰好是5个字符,除了执行ZipcodeValidator进行主要的约束检查外,需要再次 使用这个约束对元素进行验证。Bean验证允许你创建一个由其它约束组成的约束,还要注意约束定义了一个错误消息,如果验证检查约束失败就返回这个错误消 息,这里的错误消息是“Wrong zipcode”。
你也可以使用Bean验证验证一个完整的对象图(object graph),一个对象图是由其它对象组成的一个对象,如果你在对象图的根对象上指定@Valid注解,它会指引相关的验证器递归验证对象图中的关联对象,如:
public class Order{
@OrderNumber private String orderNumber;
@Valid @NotNull private Address delivery;
}
Order对象验证时,Address对象和对象图中关联的对象也被验证。
为了满足在应用程序各层之间共享相同的验证集,Java EE 6平台整合了Bean验证。例如,表示层技术,如JSF,以及企业级技术,如JPA,都可以通过Bean验证框架访问约束定义和验证器,你不再需要在多个地方指定约束。
-------------------------------------《Spring in Action3》7.4.3 Validating input-------------
When a user registers with the Spitter application, there are certain requirements that
we’d like to place on that registration. Specifically, a new user must give us their full
name, email address, a username, and a password. Not only that, but the email
address can’t be just freeform text—it must look like an email address. Moreover, the
password should be at least six characters long.
The @Valid annotation is the first line of defense against faulty form input. @Valid
is actually a part of the JavaBean validation specification.4 Spring 3 includes support
for JSR-303, and we’re using @Valid here to tell Spring that the Spitter object should
be validated as it’s bound to the form input.
Should anything go wrong while validating the Spitter object, the validation error
will be carried to the addSpitterFromForm() method via the BindingResult that’s
passed in on the second parameter. If the BindingResult’s hasErrors() method
returns true, then that means that validation failed. In that case, the method will
return spitters/edit as the view name to display the form again so that the user can
correct any validation errors.
But how will Spring know the difference between a valid Spitter and an invalid
Spitter?
DECLARING VALIDATION RULES
Among other things, JSR-303 defines a handful of annotations that can be placed on
properties to specify validation rules. We can use these annotations to define what
“valid” means with regard to a Spitter object. The following shows the properties of
the Spitter class that are annotated with validation annotations.
@Size(min=3,max=20,message= "Usernamemustbebetween3and20characterslong.") @Pattern(regexp="^[a-zA-Z0-9]+$", message="Username mustbealphanumericwithnospaces") private String username; @Size(min=6,max=20, message="The passwordmustbeatleast6characterslong.") private String password; @Size(min=3,max=50,message= "Yourfullnamemustbebetween3and50characterslong.") private String fullName; @Pattern(regexp="[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}", message="Invalid emailaddress.") private String email;
With these annotations in place, when a user submits a registration form to
SpitterController’s addSpitterFromForm() method, the values in the Spitter
object’s fields will be weighed against the validation annotations. If any of those rules
are broken, then the handler method will send the user back to the form to fix the
problem.
When they arrive back at the form, we’ll need a way to tell them what the problem
was. So we’re going to have to go back to the form JSP and add some code to display
the validation messages. DISPLAYING VALIDATION ERRORS
Recall that the BindingResult passed in as a parameter to addSpitterFromForm()
knew whether the form had any validation errors. And we were able to ask if there
were any errors by calling its hasErrors() method. But what we didn’t see was that the
actual error messages are also in there, associated with the fields that failed validation.
One way of displaying those errors to the users is to access those field errors
through BindingResult’s getFieldError() method. But a much better way is to use
Spring’s form binding JSP tag library to display the errors. More specifically, the
<sf:errors> tag can render field validation errors. All we need to do is sprinkle a few
<sf:errors> tags around our form JSP.
<%@ taglibprefix="sf"uri="http://www.springframework.org/tags/form"%>
<div>
<h2>CreateafreeSpitteraccount</h2>
<sf:form method="POST"modelAttribute="spitter"
enctype="multipart/form-data">
<fieldset>
<tablecellspacing="0">
<tr>
<th><sf:label path="fullName">Fullname:</sf:label></th>
<td><sf:input path="fullName"size="15"/><br/>
<sf:errors path="fullName"cssClass="error"/>
</td>
</tr>
<tr>
<th><sf:label path="username">Username:</sf:label></th>
<td><sf:input path="username"size="15"maxlength="15"/>
<small id="username_msg">Nospaces,please.</small><br/>
<sf:errors path="username"cssClass="error"/>
</td>
</tr>
<tr>
<th><sf:label path="password">Password:</sf:label></th>
<td><sf:password path="password"size="30"
showPassword="true"/>
<small>6 charactersormore(betricky!)</small><br/>
<sf:errors path="password"cssClass="error"/>
</td>
</tr>
<tr>
<th><sf:label path="email">EmailAddress:</sf:label></th>
<td><sf:input path="email"size="30"/>
<small>In caseyouforgetsomething</small><br/>
<sf:errors path="email"cssClass="error"/>
</td>
</tr>
<tr>
<th></th>
<td>
<sf:checkbox path="updateByEmail"/>
<sf:label path="updateByEmail"
>Send meemailupdates!</sf:label>
</td>
</tr>
<tr>
<th><label for="image">Profileimage:</label></th>
<td><input name="image"type="file"/>
</tr>
<tr>
<th></th>
<td><input name="commit"type="submit"
value="I accept.Createmyaccount."/></td>
</tr>
</table>
</fieldset>
</sf:form>
</div>
The <sf:errors> tag’s path attribute specifies the form field for which errors should
be displayed. For example, the following <sf:errors> displays errors (if there are
any) for the field whose name is fullName:
<sf:errorspath="fullName"cssClass="error"/>
If there are multiple errors for a single field, they’ll all be displayed, separated by an
HTML <br/> tag. If you’d rather have them separated some other way, then you can
use the delimiter attribute. The following <sf:errors> snippet uses delimiter to
separate errors with a comma and a space:
<sf:errorspath="fullName"delimiter=","
cssClass="error"/>
Note that there are four <sf:errors> tags in this JSP, one on each of the fields for
which we declared validation rules. The cssClass attribute refers to a class that’s
declared in CSS to display in red so that it catches the user’s attention.
With these in place, errors will be displayed on the page if any validation errors
occur. For example, figure 7.7 shows what the form would look like if the user were to
submit the form without filling in any of the fields.
Figure 7.7 With the <sf:errors> JSP tag on the registration page, validation problems
will be shown to the user for them to fix and try again.
发表评论
-
spring boot 2.0.1版本,多数据源支持
2018-05-12 09:30 1631有时候我们需要在程序中加载多个数据源,用spring jp ... -
eureka的Instances status列表显示ip
2017-09-16 14:42 16217spring cloud 版本 Dalston.R ... -
[转]解惑 spring 嵌套事务
2017-02-08 19:36 803转:http://www.iteye.com/topic/35 ... -
spring autowire="byName" 注入属性
2016-01-30 12:03 2461byName 根据属性名自动装配。此选项将检查容器并根据名 ... -
springJdbc 插入数据返回主键
2015-11-24 16:22 963public long addMsg(final SysMe ... -
RequestMappingHandlerMapping的用法
2014-11-26 14:43 30892有时候,想查看应用请求对应的ur和方法l情况,可以用Req ... -
Spring MVC HandlerExceptionResolver自定义处理异常
2014-10-29 11:27 3804用spring的接口HandlerExceptionReso ... -
spring @Autowire 的注解默认是按类型注入bean
2014-04-24 14:30 10091spring @Autowire 的注解默认是按类型注入b ... -
spring结合mysql事务注解@Transactional不起作用的问题
2014-04-23 18:04 24326最近遇到的一个比较诡异的问题,貌似各种配置都正确了,事务不 ... -
SpringMVC中使用Interceptor拦截器[转]
2014-04-18 15:30 2236转:http://haohaoxuexi.iteye.com ... -
spring抛异常之后的事务回滚
2014-03-28 15:12 1876spring 的声明式事务注 ... -
Spring MVC防御CSRF、XSS和SQL注入攻击[转]
2014-02-13 13:53 1717转;http://www.cnblogs.com/Mainz ... -
maven单元测试报java.lang.IllegalStateException: Failed to load ApplicationContext
2013-12-20 15:35 104750报这个异常java.lang.IllegalState ... -
spring 中运用单元测试
2013-12-17 11:47 1015直接上代码 package cn.pconline.bb ... -
spring 用静态工厂方法初始化bean的注意事项
2013-12-16 17:48 3970如下 <bean id="sockIOP ... -
spring3.0定时器
2012-09-20 14:27 3798from《Spring in Action3》 基于注解的s ... -
Spring中ApplicationContext加载机制
2012-09-13 20:41 2141转:http://blog.csdn.net/edis ... -
创建bean失败会造成创建sessionFactory报空指针异常
2012-09-12 18:05 7Caused by: org.springframework. ... -
Spring MVC学习之三:处理方法返回值的可选类型
2012-08-07 11:36 1367转:http://flyer2010.iteye.com/bl ... -
【转】spring配置datasource三种方式
2011-12-31 17:42 14221,使用org.springframework.jdbc.da ...
相关推荐
Java EE 6作为企业级应用开发的标准框架,提供了丰富的API和服务,用于构建可扩展、高性能、安全的企业级应用。 ### Java EE 6的关键特性 1. **简化开发**:Java EE 6引入了简化API,如JSR 315 CDI(Contexts and ...
2. **JSF 2.0 (JavaServer Faces)**:JSF 2.0是Java EE 6中的用户界面框架,提供了组件化和声明式编程模型。关键改进包括FacesFlow导航、FacesContext API的增强、以及对Partial State Saving的改进。 3. **EJB 3.1...
Java EE(Java Platform, Enterprise Edition)是Java平台上用于构建企业级Web应用的框架集合,它提供了丰富的服务和组件,使得开发者能够快速开发出分布式、多层架构的应用程序。本教程由知名讲师郑阿奇编著,旨在...
例如,Hibernate Validator、JSR 303/349 Bean Validation等都是Java中常用的验证框架。它们使用注解来定义验证规则,然后通过反射机制在运行时检查对象的属性是否符合这些规则。 1. 注解驱动验证:在字段或方法上...
在Java EE 6中,JPA 2.0引入了更多的查询选项,如 Criteria API 和 Named Queries,以及实体图形和多对多关联的改进。 2. **Enterprise JavaBeans (EJB 3.1)**:EJB是Java EE的核心组件,用于构建可部署在服务器端...
5. **Enterprise JavaBeans (EJB)**:EJB是Java EE中的核心服务,用于创建可部署在服务器上的业务组件,包括会话bean、实体bean和消息驱动bean。 6. **Java Message Service (JMS)**:JMS允许应用程序通过消息传递...
JSF是一个用于构建用户界面的MVC (Model-View-Controller) 框架,支持声明式编程和丰富的组件库,是Java EE 6中的重要Web展示层技术。 3. **mail.jar**: 包含了JavaMail API,用于处理电子邮件的发送和接收。在开发...
- **安全机制**:探讨 Java EE 7 中的安全特性,如身份验证和授权。 ##### 第9章:事务 - **事务隔离级别**:学习 Java EE 7 中支持的不同事务隔离级别。 - **事务传播行为**:理解不同事务传播行为的含义及其应用...
Java EE(Enterprise Edition)6是Java平台上用于构建企业级应用的框架,它是Oracle公司推出的针对分布式、多层架构的企业级应用程序开发的标准。这个版本在2009年发布,为开发者提供了许多改进和新特性,旨在简化...
2. **JavaServer Faces (JSF)**:JSF是Java EE提供的一种声明式UI框架,简化了用户界面的创建。了解JSF组件模型、事件处理和转换验证机制是必要的。 3. **Java Persistence API (JPA) 和 Hibernate**:JPA是Java EE...
《Java EE 7 Essentials》是一本详细介绍Java企业版7(Java EE 7)的书籍,涵盖了Java EE 7平台的新特性、组件以及应用场景。Java EE 7是在2013年推出的Java企业级计算平台的标准版本,它在Java EE 6的基础上做了...
在Java EE轻量级实践中,我们通常关注的是如何在不牺牲性能和可扩展性的同时,降低应用程序的复杂性和开销。这里的"轻量级"主要指的是使用轻量级框架,如Spring MVC、Hibernate等,来替代传统的Java EE企业级组件,...
Java EE 6中的容器负责管理应用程序组件的生命周期,提供服务,例如资源注入、依赖注入、安全性、事务管理等。容器分为Web容器和EJB容器,Web容器主要管理Servlet和JSP,而EJB容器则管理EJB组件。 **6. 资源适配器*...
5. **Unified EL (Expression Language)**:统一表达语言在Java EE6中得到了增强,提供了更强大的表达式处理能力,包括对函数的支持,使得数据访问和表达更加灵活。 6. **Interceptors and Decorators**:EJB 3.1中...
### 关于《Beginning Java™ EE 6 Platform with GlassFish™ 3 第二版》的知识点概览 本书《Beginning Java™ EE 6 Platform with GlassFish™ 3 第二版》是一本面向Java初学者和进阶者的教程书籍,旨在帮助读者...
根据给定的文件信息,我们将深入探讨与Java EE 7教程相关的关键知识点,这将包括对Java EE平台的理解、其核心组件以及版本7所引入的新特性。 ### Java EE(Java Platform, Enterprise Edition)概述 Java EE是Java...
9. **JPA(Java Persistence API)与Hibernate**:JPA是Java EE中的ORM(对象关系映射)标准,而Hibernate是其流行实现。这部分可能涉及实体类的创建、持久化操作、查询语言(JPQL)等。 10. **JSF(JavaServer ...
Java EE 6(Java Platform, Enterprise Edition 6)是Java技术在企业级应用开发中的一个里程碑,它提供了全面的框架和服务来构建分布式、基于组件的应用程序。Java EE 6 API Documentation 是官方发布的开发者指南,...
6. **Struts或JSF**:这两个是Java EE的MVC框架,用于控制应用程序流程。如果项目没有采用Spring MVC,那么可能是使用Struts或JavaServer Faces(JSF)来处理用户请求和展现视图。 7. **JSTL与EL**:JavaServer ...