springmvc-3.2-jsr303解决服务端验证问题
从以前的验证:Stringutils.isEmpty....到struts的验证:xxxvalidate
现在使用jsr303使之更加简单
依赖hibernate-validator-4.xx.jar
实体类中的变化
@Entity
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class Admin { @Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
// 加NotEmpty注解,如果为空有提示
@NotEmpty(message="账号不能为空")
private String name;
@NotEmpty(message="密码不能为空")
private String password;
表单书写方式发生变化
首先导入springmvc的标签
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<!--来这个表单之前先传一个admin过来 commandName="admin" -->
<form:form method="POST" commandName="admin">
<legend>登录</legend>
<!-- <form:errors path="*" cssClass="help-inline text-error" element="span"/>这样是所有错误都在这显示,也可以像下面分开写 -->
<label>账号</label>
<!-- path相当于以前的name属性 -->
<form:input path="name"/>
<form:errors path="name" cssClass="help-inline text-error" element="span"/>
<label>密码</label>
<form:password path="password"/>
<form:errors path="password" cssClass="help-inline text-error" element="span"/>
<div class="form-actions">
<button class="btn btn-primary">登录</button>
</div>
</form:form>
----------------------------------------------------------
/*以前是这样
@RequestMapping(value="/",method=RequestMethod.GET)
public String index() { return "index";
} */
/* 现在有了commandName="admin"这个form属性就必须在到达页面前传过去一个admin,虽然是空的 */
@RequestMapping(value="/",method=RequestMethod.GET)
public String index(Model model) {
model.addAttribute("admin", new Admin());
return "index";
} /* 在提交的方法中也要有所改变 */
@RequestMapping(value="/",method=RequestMethod.POST)
/* 使用jsr303,提交过来的表单必须用对象接受,不能用name,password
需要加注解@Valid表明admin是需要验证的
而且@Valid Admin admin必须放在最前面*/
public String login(@Valid Admin admin,BindingResult bindingResult,HttpSession session,RedirectAttributes redirectAttributes) {
/* 添加了BindingResult这个参数,如果验证有了错误就return到index页面
注意,不是重定向到index 做到这里效果就是如果有错误就会还在index页面并提示账户和密码不能空
当账户写了,但是密码没写,就会只提示密码为空,而且账户的input框中填写的信息不会消失
就是因为
1.我们来这个页面的时候传过来一个空的admin对象,所以他把你写的值都set放入到admin中
2.input框中填写的信息没有消失,是因为我们是return index而不是重定向,然后又把admin中的值get进去
*/
if(bindingResult.hasErrors()) {
return "index";
} Admin currAdmin = adminService.login(admin.getName(),admin.getPassword());
if(currAdmin == null) {
redirectAttributes.addFlashAttribute("message", "账号或密码错误");
<!-- 重定向 -->
return "redirect:/";
} else {
session.setAttribute("curr_admin", currAdmin);
return "redirect:/book";
}
}
springmvc-3.2-jsr303解决服务端验证问题的更多相关文章
- JSR-303 Bean Validation 介绍及 Spring MVC 服务端验证最佳实践
任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用在很多时候,同样的数据验证逻辑会出现在不同的层, ...
- .net使用FluentValidation进行服务端验证。
背景 最近使用asp.mvc 做一个在线口语系统项目,在服务端验证问题遇到了一些小问题. 自己根据数据库表user定义一个数据库表实体对象UserDbEntity [Table(" ...
- Asp.net MVC 服务端验证多语言错误
服务端验证用户提交信息时为了实现多语言使用了资源文件,如: using System.ComponentModel.DataAnnotations; public class UserModel { ...
- Easyui validatebox后台服务端验证
Easyui validatebox的验证提示十分好用,可是在实际项目的运用中,经常会遇到需要服务器验证后并返回验证结果信息,比如验证用户名.手机号.邮箱是否已存在.于是就想着怎么拓展Easyui的验 ...
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
ASP.NET MVC通过Model验证帮助我们很容易的实现对数据的验证,在默认的情况下,基于ValidationAttribute的声明是验证被使用,我们只需 要将相应的ValidationAttr ...
- C#在服务端验证客户端证书(Certificate)
使用https协议进行通讯的时候可以设置双向证书认证,客户端验证服务端证书的方法前面已经介绍过了,现在说一下在服务端验证客户端证书的方案. 这里给出的方案比较简单,只需要在Service端的配置文件中 ...
- ASP.NET的服务端验证(干货)
最近有项目需要使用.net的web,啥也不说,直接开始学习.net的mvc框架.感觉微软的web项目其实还是很好用的,今天和大家分享一下服务端验证的事情.其实原理就是用到了c#的特性,特性不用多说,大 ...
- MIME类型-服务端验证上传文件的类型
MIME的作用 : 使客户端软件,区分不同种类的数据,例如web浏览器就是通过MIME类型来判断文件是GIF图片,还是可打印的PostScript文件. web服务器使用MIME来说明发送数据的种类, ...
- 使用Httpclient 完美解决服务端跨域问题
项目需求: jsonp是从前台js的角度考虑,通过Ajax调用springMVC的接口.同一个ip.同一个网络协议.同一个端口,三者都满足就是同一个域,否则就是跨域问题了.首页广告需要一个轮播的效果, ...
随机推荐
- django分页linaro-django-pagination
1.安装linaro-django-pagination settings INSTALLED_APPS = ( # ... 'linaro_django_pagination', ) MIDDLEW ...
- MVC-07 案例1
>>>>>ContosoUniversity网站 ------------------------------------------- 一.并发冲突 1. 为什么会并发 ...
- 分组求和SQL示例
1.ROLLUP和CUBE函数,自动汇总数据 select * from test_tbl的数据这样的 col_a col_b col_c ---- ----- ...
- ElasticSearch 插件配置
http://blog.sina.com.cn/s/blog_8f31e5b10101dsnq.html http://www.tuicool.com/articles/mMZfu2 http://b ...
- live555学习经验链接二
live555学习经验链接二:http://blog.csdn.net/nkmnkm/article/category/1066093/2
- JavaSE学习总结第03天_Java基础语法2
03.01 数据类型中补充的几个小问题 1:在定义Long或者Float类型变量的时候,要加L或者f. 整数默认是int类型,浮点数默认是double. byte,short在定义的时候, ...
- vim插件管理之Vundle
Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.正是由于其可定制的特性, 许许多多的Vim插件便诞生了.管理这些插件又成为我们最为头疼的问题,最近无 ...
- 迪杰斯特拉算法c语言实现
/*http://1wangxiaobo@163.com 数据结构C语言版 迪杰斯特拉算法 P189 http://1wangxiaobo@163.com 编译环境:Dev-C++ 4.9.9.2 ...
- WPF:使用Json.NET在TreeView中树形显示JSON数据
原文 WPF:使用Json.NET在TreeView中树形显示JSON数据 据 读者可以参考这个开源的可以树形显示XML和JSON的工具: Mgen Object 603:XML/JSON树形显示小工 ...
- (3)选择元素——(3)$()方法(The $() function)
No matter which type of selector we want to use in jQuery, we always start with the same function: $ ...