- 浏览: 7193255 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (397)
- 架构研究 (44)
- 网络协议-TCP/HTTP (20)
- SPRING (23)
- HIBERNATE 3 (30)
- STRUTS 2 (20)
- Java/J2se (25)
- Servlet/Jsp (9)
- 开发工具IDE (10)
- WEB服务器 (17)
- 前端--Java Script (33)
- 前端--CSS (7)
- OS--Linux (31)
- OS--MAC OS (19)
- MySQL数据库 (19)
- Oracle数据库 (11)
- 项目管理工具 (12)
- 数据报表技术 (4)
- 图像处理技术 (10)
- 其它综合技术 (13)
- 权限管理 (1)
- MyBatis (1)
- 网络安全 (6)
- IO (21)
- PostgreSQL (2)
- Eclipse RCP (1)
- GWT (1)
- 算法 (3)
- Storm (2)
- zookeeper (3)
- 消息 (1)
最新评论
-
bukebuhao:
已解决,打开文件太多。ulimit -n 上次临时生效后再次s ...
TFS(Taobao File System)配置dataServer、分区、挂载数据盘 -
bukebuhao:
ds重启后启动不了。报错信息如下,请大神帮助[2018-08- ...
TFS(Taobao File System)配置dataServer、分区、挂载数据盘 -
墨上清:
感谢,看完有了一个完整的知识网络。
Spring MVC 教程,快速入门,深入分析 -
云卷云舒灬:
谢谢,学到很多
Spring MVC 教程,快速入门,深入分析 -
luozhy:
非常感谢非常感谢
Project Web Access ActiveX控件 安装
表单:
用户注册页面: 名称:user.jsp
注册用户包含三项信息: 用户名,密码,邮箱。
- < %@ page language = "java" contentType = "text/html; charset=UTF-8" % >
- < %@ taglib prefix = "sf" uri = "http://www.springframework.org/tags/form" % >
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- < html >
- < head >
- < meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" >
- < title > User Register Page </ title >
- < style type = "text/css" >
- .error{
- color: red;
- }
- </ style >
- </ head >
- < body >
- < %--
- 这里指定页面绑定的对象 modelAttribute. 之前很困惑,
- 为什么< form > 上最重要的 < form action = "someAction.do" > 属性没了呢?
- 后来发现,其实在controller中的方法以及指定了地址到method的对应关系,
- < form > 里的action属性就可以退休了。
- --%>
- < sf:form method = "post" modelAttribute = "user" >
- < p > 用户注册页面: </ p >
- < table width = "60%" align = "center" >
- < colgroup >
- < col width = "10%" align = "right" />
- < col />
- </ colgroup >
- < tr >
- < th > 用户名: </ th >
- < td >
- < sf:input path = "userName" />
- < small > length of userName is not more than 20. </ small > < br />
- < %-- 显示关于userName属性相关的错误信息。 --% >
- < sf:errors path = "userName" cssClass = "error" />
- </ td >
- </ tr >
- < tr >
- < th > 密码: </ th >
- < td >
- < sf:password path = "password" />
- < small > length of password is not less than 6. </ small > < br />
- < sf:errors path = "password" cssClass = "error" />
- </ td >
- </ tr >
- < tr >
- < th > 邮箱: </ th >
- < td >
- < sf:input path = "email" />
- < small > format should confirm to general standard. </ small > < br />
- < sf:errors path = "email" cssClass = "error" />
- </ td >
- </ tr >
- < tr >
- < td colspan = "2" align = "center" >
- < input type = "submit" value = "注册" />
- </ td >
- </ tr >
- </ table >
- </ sf:form >
- </ body >
- </ html >
校验方式一: JSR303 Bean Validation
在Spring3.1中增加的了对JSR303 Bean Validation规范的支持,不仅可以对Spring的 MVC进行校验,而且也可以对Hibernate的存储对象进行校验。是一个通用的校验框架。
环境准备:
A) 导入Hibernate-Validator
要使用JSR303 校验框架, 需要加入框架的具体实现Hibernate-Validator, 在soureforge上下载最新的Hibernate-Validator
, 当前版本为4.2.0 Final版。
在/WEB-INF/lib中导入 hibernate-validator-4.2.0.Final.jar, hibernate-validator-annotation-processor-4.2.0.Final.jar, 导入它的lib/required目录下内容slf4j-api-1.6.1.jar, validation-api-1.0.0.GA.jar;
B) 配置Spring对JSR 303 的支持。
在你的 <servletName>-servlet.xml配置文件中,使用标签:
- < mvc:annotation-driven />
配置对JSR303的支持,包括制动查找Hibernate-Validator的实现等工作。
1) 可用的
JSR303注解
空检查
@Null 验证对象是否为null
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.
Booelan检查
@AssertTrue 验证 Boolean 对象是否为 true
@AssertFalse 验证 Boolean 对象是否为 false
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) Validates that the annotated string is between min and max included.
日期检查
@Past 验证 Date 和 Calendar 对象是否在当前时间之前
@Future 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern 验证 String 对象是否符合正则表达式的规则
数值检查,建议使用在Stirng,Integer类型,不建议使用在int类型上,因为表单值为“”时无法转换为int,但可以转换为Stirng为"",Integer为null
@Min 验证 Number 和 String 对象是否大等于指定的值
@Max 验证 Number 和 String 对象是否小等于指定的值
@DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度
@DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度
@Digits 验证 Number 和 String 的构成是否合法
@Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。
@Range(min=, max=) Checks whether the annotated value lies between (inclusive) the specified minimum and maximum.
@Range(min=10000,max=50000,message="range.bean.wage")
private BigDecimal wage;
@Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证)
@CreditCardNumber信用卡验证
@Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。
@ScriptAssert(lang= ,script=, alias=)
@URL(protocol=,host=, port=,regexp=, flags=)
通过上述Constraint约束后的User对象如下:
- package org.study.domain;
- import javax.validation.constraints.Pattern;
- import javax.validation.constraints.Size;
- import org.study.validation.annotation.NotEmpty;
- public class User {
- @Size (min= 3 , max= 20 , message= "用户名长度只能在3-20之间" )
- private String userName;
- @Size (min= 6 , max= 20 , message= "密码长度只能在6-20之间" )
- private String password;
- @Pattern (regexp= "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" , message= "邮件格式错误" )
- private String email;
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this .userName = userName;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this .password = password;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this .email = email;
- }
- public String toString(){
- StringBuilder sb = new StringBuilder();
- sb.append(getClass()).append("[" )
- .append("userName=" ).append(userName).append( ", " )
- .append("password=" ).append(password).append( ", " )
- .append("email=" ).append(email).append( "]" );
- return sb.toString();
- }
- }
2) Validate的触发
在需要校验的对象前增加 @Valid 注解 (该注解位于javax.validation包中)来触发校验。示例如下:
- /**
- * 处理提交的用户注册信息。
- * @param model
- * @return
- */
- @RequestMapping (method = RequestMethod.POST)
- public String doRegister( @Valid User user, BindingResult result){
- if (logger.isDebugEnabled()){
- logger.debug("process url[/user], method[post] in " +getClass());
- }
- //校验没有通过
- if (result.hasErrors()){
- return "user" ;
- }
- if (user != null ){
- userService.saveUser(user);
- }
- return "user" ;
- }
这样就可以完成针对输入数据User对象的校验了, 校验结果任然保存在BindingResult对象中。
校验方式二: Spring Validator
1)Validator接口的实现:
Spring框架的Validator接口定义,
- package org.springframework.validation;
- public interface Validator {
- boolean supports(Class<?> clazz);
- void validate(Object target, Errors errors);
- }
要使用它进行校验必须实现该接口。实现Validator接口的代码如下:
- package org.study.validation.validator;
- import org.springframework.validation.Errors;
- import org.springframework.validation.ValidationUtils;
- import org.springframework.validation.Validator;
- import org.study.domain.User;
- public class UserValidator implements Validator {
- @Override
- public boolean supports(Class<?> clazz) {
- return clazz.equals(User. class );
- }
- @Override
- public void validate(Object target, Errors errors) {
- ValidationUtils.rejectIfEmpty(errors, "userName" , "user.userName.required" , "用户名不能为空" );
- ValidationUtils.rejectIfEmpty(errors, "password" , "user.password.required" , "密码不能为空" );
- ValidationUtils.rejectIfEmpty(errors, "email" , "user.email.required" , "邮箱不能为空" );
- User user = (User)target;
- int length = user.getUserName().length();
- if (length> 20 ){
- errors.rejectValue("userName" , "user.userName.too_long" , "用户名不能超过{20}个字符" );
- }
- length = user.getPassword().length();
- if (length < 6 ){
- errors.rejectValue("password" , "user.password.too_short" , "密码太短,不能少于{6}个字符" );
- }else if (length> 20 ){
- errors.rejectValue("password" , "user.password.too_long" , "密码太长,不能长于{20}个字符" );
- }
- int index = user.getEmail().indexOf( "@" );
- if (index == - 1 ){
- errors.rejectValue("email" , "user.email.invalid_email" , "邮箱格式错误" );
- }
- }
- }
2) 设置Validator,并触发校验。
在我们的Controller中需要使用父类已有的方法来为DataBinder对象指定Validator, protected initBinder(WebDataBinder binder); 代码如下:
- @InitBinder
- protected void initBinder(WebDataBinder binder){
- binder.setValidator(new UserValidator());
- }
为binder对象指定好Validator校验对象后,下面一步的就是在需要校验的时候触发validate方法,该触发步骤是通过 @Validated 注解(该注解是Spring框架定义的)实现的。
- /**
- * 处理提交的用户注册信息。
- * @param model
- * @return
- */
- @RequestMapping (method = RequestMethod.POST)
- public String doRegister( @Validated User user, BindingResult result){
- if (logger.isDebugEnabled()){
- logger.debug("process url[/user], method[post] in " +getClass());
- }
- //校验没有通过
- if (result.hasErrors()){
- return "user" ;
- }
- if (user != null ){
- userService.saveUser(user);
- }
- return "user" ;
- }
至此,从页面提交的User对象可以通过我们实现的UserValidator类来校验了,校验的结果信息存入BindingResult result对象中。在前台页面可以使用spring-form的标签<sf:errors path="*" />来显示。
发表评论
-
MVC5
2012-03-19 13:52 4568http://starscream.iteye.com/blo ... -
MVC4
2012-01-21 19:40 2674空空空空空 ... -
MVC3 一些杂七杂八的东西
2012-01-15 00:47 7188要解决的问题: @Request ... -
Spring MVC 教程,快速入门,深入分析
2011-01-16 19:22 1335655资源下载: Spring_MVC_教程_快速入门_深入分析V ... -
MVC 前前奏
2010-10-24 13:16 3931空空空空空 -
Struts2、SpringMVC、Servlet(Jsp)性能对比 测试
2010-06-24 11:31 64171作者:赵磊 博客:ht ... -
Spring常用注解,自动扫描装配Bean
2009-08-08 12:05 578921 引入context命名空间(在Spring的配 ... -
使用注解实现AOP
2009-07-30 16:37 38721 引入aop命名空间 xmlns:ao ... -
AOP 1
2009-05-11 10:24 2781空空空空空空 -
Spring MyBatis
2009-03-21 08:29 3798Spring MyBatis -
Spring Hibernate
2009-03-20 17:46 2925Spring Hibernate -
Spring JDBC
2009-03-20 15:06 8036Spring JDBC -
事务的难点
2009-03-20 09:01 3211事务的难点事务的难点事务的难点事务的难点 -
编程式事务、XML配置事务、注解实现事务
2009-03-12 15:20 3684Spring2.0框架的事 ... -
Spring的事务传播属性,数据库的隔离级别
2009-03-08 11:50 4923Spring事务的传播属性 ... -
Spring的数据源配置 DBCP、C3P0、BoneCP
2009-02-24 15:18 11051Spring建议使用的数据 ... -
国际化
2009-02-16 16:45 2586国际化国际化国际化国际化 -
Spring Bean的5种作用域
2009-02-13 12:47 8351Spring Bean的5种作用域 sin ... -
IoC控制反转--管理Bean
2009-02-13 11:35 6170一、IoC 概述 IoC(控制反转:Inverse of ... -
BeanFactory 和ApplicationContext(Bean工厂和应用上下文)
2009-02-07 15:12 14917一、BeanFactory 和ApplicationConte ...
相关推荐
本文实例为大家分享了Asp.net Mvc表单验证的制作代码,供大家参考,具体内容如下 将ASP.NET MVC或ASP.NET Core MVC的表单验证改成气泡提示: //新建一个js文件(如:jquery.validate.Bubble.js),在所有要验证的页面...
1. **MVC表单验证**: MVC中的表单验证主要涉及在用户提交表单数据时确保数据的有效性和完整性。通常,验证发生在两个阶段:客户端验证和服务器端验证。 - **客户端验证**:这是在用户浏览器上进行的,通过...
在Spring MVC框架中,表单验证是一个至关重要的环节,它确保了从客户端提交的数据符合预设的业务规则,从而防止因无效数据导致的错误或安全问题。Validation是Java世界中用于对象验证的标准API,通常与Hibernate ...
Aspnet Mvc教程 1.说明 01:06 Aspnet Mvc教程 2.准备工作 02:37 Aspnet Mvc教程 3....Aspnet Mvc教程 4....Aspnet Mvc教程 5....Aspnet Mvc教程 6.mvc理论讲解 03:53 Aspnet Mvc教程 7.ViewData 04:51 ...表单验证 10:50
在Spring MVC框架中,服务端表单验证是一个关键的步骤,确保从客户端接收到的数据是有效和安全的。本实例提供了完整的代码和配置,让你能够快速理解和应用服务端验证。以下是对这个实例的详细解析: 1. **Spring ...
ASP.NET MVC Form表单验证是Web开发中一个关键的安全措施,用于确保用户输入的数据符合预设的规则,防止恶意攻击和数据错误。在ASP.NET MVC框架中,表单验证主要涉及客户端验证和服务器端验证两个方面,以确保数据在...
ASP.Net MVC教程 19 表单验证_标清
### ASP.NET MVC 客户端验证详解 #### 一、引言 在现代Web应用程序开发中,对用户输入的有效性和合法性进行验证是非常重要的步骤之一。ASP.NET MVC框架提供了丰富的工具和特性来帮助开发者轻松实现这一目标。特别...
本篇文章将深入探讨Spring MVC中的表单标签库,以及如何在实际项目中使用它们来创建动态、交互式的表单。 1. **表单标签库介绍** Spring MVC的表单标签库是JSP的一部分,它可以生成HTML表单元素,并且能够自动绑定...
### 基于ASP.NET Ajax框架实现表单验证编程原理详解 #### 一、引言 随着Web应用程序的复杂度不断提高,确保用户数据的安全性和准确性变得尤为重要。ASP.NET Ajax框架提供了一种强大的方式来增强用户体验,并同时...
ASP.NET MVC3提供了客户端验证功能,可以在浏览器端验证表单数据,防止无效数据到达服务器。同时,我们还需要处理服务器端的异常,通过Ajax响应状态码和返回信息,让客户端知道操作是否成功。 总结来说,ASP.NET ...
本文将深入探讨Struts中的表单验证,这是构建用户交互界面时一个至关重要的部分。 表单验证是在用户提交数据前检查输入的有效性,以确保数据的完整性和安全性。在Struts框架中,表单验证通常通过两个主要方式实现:...
客户端验证是在浏览器端进行的,它提高了用户体验,因为数据验证发生在用户提交表单之前,减少了服务器的负担。让我们深入了解一下`IClientValidatable`以及如何在实际应用中使用它。 `IClientValidatable`接口位于...
在IT领域,表单验证是Web开发中不可或缺的一部分,它确保用户输入的数据符合应用程序的预期标准,从而保证数据的完整性和安全性。标题提到的“极好的表单验证方案”提供了一种高效、实用的方法,避免了传统的逐个...
下面将详细阐述Spring MVC实现登录验证的相关知识点。 **1. Spring MVC简介** Spring MVC是Spring框架的一个模块,专门用于构建Web应用程序。它提供了模型-视图-控制器(MVC)架构,简化了开发过程,使得业务逻辑与...
在Struts2中,表单验证是非常重要的一个环节,它确保了用户输入的数据符合预设的规则,从而保证了应用程序的数据质量和安全性。本示例主要讲解的是使用XML文件进行表单验证的方法。 首先,让我们理解表单验证的基本...
1.示例代码完整可用,具备在MVC使用表单身份验证,角色授权功能。 并且支持cookie加密。 2.为了方便教学,整个项目末连接数据库,将用户名及角色名称写死了。使用时,自行调用数据库即可。 3.实际使用时将cookie角色...
Aspnet Mvc教程 1.说明 01:06 Aspnet Mvc教程 2.准备工作 02:37 Aspnet Mvc教程 3....Aspnet Mvc教程 4....Aspnet Mvc教程 5....Aspnet Mvc教程 6.mvc理论讲解 03:53 Aspnet Mvc教程 7.ViewData 04:51 ...表单验证 10:50