从以前的验证: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解决服务端验证问题的更多相关文章

  1. JSR-303 Bean Validation 介绍及 Spring MVC 服务端验证最佳实践

    任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用在很多时候,同样的数据验证逻辑会出现在不同的层, ...

  2. .net使用FluentValidation进行服务端验证。

          背景 最近使用asp.mvc 做一个在线口语系统项目,在服务端验证问题遇到了一些小问题. 自己根据数据库表user定义一个数据库表实体对象UserDbEntity [Table(" ...

  3. Asp.net MVC 服务端验证多语言错误

    服务端验证用户提交信息时为了实现多语言使用了资源文件,如: using System.ComponentModel.DataAnnotations; public class UserModel { ...

  4. Easyui validatebox后台服务端验证

    Easyui validatebox的验证提示十分好用,可是在实际项目的运用中,经常会遇到需要服务器验证后并返回验证结果信息,比如验证用户名.手机号.邮箱是否已存在.于是就想着怎么拓展Easyui的验 ...

  5. ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)

    ASP.NET MVC通过Model验证帮助我们很容易的实现对数据的验证,在默认的情况下,基于ValidationAttribute的声明是验证被使用,我们只需 要将相应的ValidationAttr ...

  6. C#在服务端验证客户端证书(Certificate)

    使用https协议进行通讯的时候可以设置双向证书认证,客户端验证服务端证书的方法前面已经介绍过了,现在说一下在服务端验证客户端证书的方案. 这里给出的方案比较简单,只需要在Service端的配置文件中 ...

  7. ASP.NET的服务端验证(干货)

    最近有项目需要使用.net的web,啥也不说,直接开始学习.net的mvc框架.感觉微软的web项目其实还是很好用的,今天和大家分享一下服务端验证的事情.其实原理就是用到了c#的特性,特性不用多说,大 ...

  8. MIME类型-服务端验证上传文件的类型

    MIME的作用 : 使客户端软件,区分不同种类的数据,例如web浏览器就是通过MIME类型来判断文件是GIF图片,还是可打印的PostScript文件. web服务器使用MIME来说明发送数据的种类, ...

  9. 使用Httpclient 完美解决服务端跨域问题

    项目需求: jsonp是从前台js的角度考虑,通过Ajax调用springMVC的接口.同一个ip.同一个网络协议.同一个端口,三者都满足就是同一个域,否则就是跨域问题了.首页广告需要一个轮播的效果, ...

随机推荐

  1. ssh无密登录

    ssh登录一般两种方式: 1.密码登录 2.密钥验证无需密码 使用方式:1.生成密钥 2.将公钥追加到authorized_keys中,需要注意的是执行权限需为600,这里因而第一次添加使用的是> ...

  2. Microsoft SQL Server 混合云博客系列

    Microsoft 云操作系统愿景的核心支柱之一就是借助我们的混合云基础结构改造数据中心.在 Windows Azure 基础结构服务正式发布后的几个月里,我们一直在发布博客,介绍 Windows A ...

  3. C++模板:ST算法

    //初始化 void init_rmq(int n){ for(int i=0;i<n;i++)d[i][0]=a[i]; for(int j=1;(1<<j)<=n;j++) ...

  4. 转载Spring IntrospectorCleanupListener

    "在服务器运行过程中,Spring不停的运行的计划任务和OpenSessionInViewFilter,使得Tomcat反复加载对象而产生框架并用时可能产生的内存泄漏,则使用Introspe ...

  5. 柯里化函数之Javascript

    柯里化函数之Javascript 定义 依据定义来说,柯里化就是将一个接收"多个"參数的函数拆分成一个或者很多个接收"单一"參数的函数.定义看起来是比較抽象的. ...

  6. Nlog的简单使用

    Nlog是.net平台下的开源日志组件,相当于log4net用法配置更简单.用途可以将日志输出到数据库,文本文件,控制台等.首先引用NLog.dll,顺便也将NLog.xml丢到运行目录准备工作完后, ...

  7. BCS--设置BDC元数据存储权限--访问被业务数据拒绝

    设置元数据存储权限 http://blog.163.com/liangshan_wei@126/blog/static/8297850320139126930290/

  8. Oracle存储过程function语法及案例

    create or replace function F01_SX03_SUM(statdate varchar2, code varchar2, para varchar2) RETURN numb ...

  9. What day is that day?(快速幂,打表找周期,或者求通项公式)

    有些题怎么都解不出来,这时候可以打表,找规律,求通项公式等,这些方法让人拍手叫绝,真不错…… Description It's Saturday today, what day is it after ...

  10. QT 强止杀进程

    bool KillProcess(QString ProcessName){  bool result = false; QString str1; HANDLE hSnapShot = Create ...