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";
        }
    }
时间: 2024-08-02 23:55:56

springmvc-3.2-jsr303解决服务端验证问题的相关文章

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

任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用在很多时候,同样的数据验证逻辑会出现在不同的层,这样就会导致代码冗余和一些管理的问题. 为了避免这样或那样的情况发生,最好是将验证逻辑与相应的数据模型进行绑定. 1. JSR-303 Bean Validation JSR 是Java Specification Requests 的缩写,是指向 JCP(Java Community Proces

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

      背景 最近使用asp.mvc 做一个在线口语系统项目,在服务端验证问题遇到了一些小问题. 自己根据数据库表user定义一个数据库表实体对象UserDbEntity 1 [Table("User")] 2 public class UserDbEntity : DbEntityModelBase 3 { 4 [Description("用户名")] 5 [Required(ErrorMessage="*")] 6 public stri

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

ASP.NET MVC通过Model验证帮助我们很容易的实现对数据的验证,在默认的情况下,基于ValidationAttribute的声明是验证被使用,我们只需 要将相应的ValidationAttribute应用到Model的类型或者属性上即可.对于自定义验证,我们也只需要定义相应的Validation 就可以了,不过服务端验证比较简单,而客户端验证就要稍微复杂一些,本文提供一个简单的实例说明在ASP.NET MVC中实现自定义验证的基本步骤.[源代码从这里下载] 一.AgeRangeAttr

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

MIME的作用 : 使客户端软件,区分不同种类的数据,例如web浏览器就是通过MIME类型来判断文件是GIF图片,还是可打印的PostScript文件. web服务器使用MIME来说明发送数据的种类, web客户端使用MIME来说明希望接收到的数据种类. Tomcat的安装目录/conf/web.xml 中就定义了大量MIME类型 ,你可也去看一下. 最近在做用表单上传文件,想在服务端验证上传文件的类型,只允许上传GIF,JPG,ZIP, 我们有两种方法, 第一:检查文件的扩展名, 第二:检查文

项目中客户端,服务端验证,数据库联合唯一约束,事务管理。

项目中有个需求,发布一个活动,记录下参加该活动的id和参与人id,同时调用接口,往收藏夹中添加一条记录,往交易表中添加一条记录.最后根据返回的结果,给出不同的提示信息. 1.如果当前的在jsp页面上面做处理,判断是否参与过.参加过之后,参加按钮不可点.没有参加的情况,参加按钮可以点. 2.jsp客户端加上js处理,参加按钮点击完之后,按钮不可点. 3.在controller中,业务逻辑开始前,再次java判断是否参加过该活动. 4.在数据库中参与表(活动id,参与人id)加上联合唯一约束.根据异

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

项目需求: jsonp是从前台js的角度考虑,通过Ajax调用springMVC的接口.同一个ip.同一个网络协议.同一个端口,三者都满足就是同一个域,否则就是跨域问题了.首页广告需要一个轮播的效果,取后台数据json格式.上篇博客介绍了使用jsonp来解决跨域,现在有个新的方法来解决,那就是:ajax请求地址改为自己系统的后台地址,之后在自己的后台用HttpClient请求url.封装好的跨域请求url工具类.封装一个get一个POST即可. 两者的区别就在于,jsonp是基于客户端的跨域解决

SpringMvc测试框架详解----服务端测试

随着RESTful Web Service的流行,测试对外的Service是否满足期望也变的必要的.从Spring 3.2开始Spring了Spring Web测试框架,如果版本低于3.2,请使用spring-test-mvc项目(合并到spring3.2中了). Spring MVC测试框架提供了对服务器端和客户端(基于RestTemplate的客户端)提供了支持. 对于服务器端:在Spring 3.2之前,我们测试时一般都是直接new控制器,注入依赖,然后判断返回值.但是我们无法连同Spri

model验证——remote服务端验证

项目中做的项目使用的mvc的model验证,感觉最难的一个是remote验证,其它的比较简单就不说了: remote验证例子: /// <summary> /// ErrorMessage 表示验证不通过时显示的消息 ///AdditionalFields 表示验证的时候用哪个字段作为参数来传递(通常用于编辑页面的时候验证) /// </summary> [Remote("actionName", "controllerName", Erro

Verify an App Store Transaction Receipt 【苹果服务端 验证一个应用程序商店交易收据有效性】

转自:http://blog.csdn.net/saindy5828/article/details/6414014 1. 从Transaction 的TransactionReceipt属性中得到接收的数据,并以base64编码: 2.创建JSON对象,字典格式,单键值对,键名为“receiptdata”,值为上一次编码的数据,效果: {"receipt-data":"base64编码之后的数据"} 3.发送HTTP POST请求,将数据发送到App Store