SpringMVC Validation验证(帖子最后有个问题,麻烦大神指点一下)

package com.domain;

import java.io.Serializable;

public class User implements Serializable {
    private String loginname;
    private String password;
    public String getLoginname() {
        return loginname;
    }
    public void setLoginname(String loginname) {
        this.loginname = loginname;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}
package com.validator;

import org.springframework.stereotype.Repository;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

import com.domain.User;

@Repository("userValidator")//注解将该对象注释为Spring容器中的一个bean,名字为userValidator
public class UserValidator implements Validator {

    /**该校验器能够对clazz类型的对象进行校验*/
    @Override
    public boolean supports(Class<?> clazz) {
        // TODO Auto-generated method stub
        return User.class.isAssignableFrom(clazz);
    }

    /**对目标target进行校验,并将校验错误存到errors中*/
    @Override
    public void validate(Object target, Errors errors) {
        // TODO Auto-generated method stub
        ValidationUtils.rejectIfEmpty(errors, "loginname", "loginnameError");
        ValidationUtils.rejectIfEmpty(errors, "password", "passwordError");
        User user = (User)target;
        if(user.getLoginname().length() > 10)
        {
            errors.rejectValue("loginname", null, "loginnameMax");
        }

        if(user.getPassword() != null && user.getPassword().length() < 6)
        {
            errors.rejectValue("password", null, "passwordMin");
        }
    }

}
package com.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.domain.User;
import com.validator.UserValidator;

@Controller
public class UserController{

    //注入userValidator
    @Autowired
    @Qualifier("userValidator")
    private UserValidator userValidator;

    @RequestMapping(value="/login",method=RequestMethod.POST)
    public String login(@ModelAttribute User user,Model model,Errors errors)
    {
        model.addAttribute("user", user);
        //验证
        userValidator.validate(user, errors);
        if(errors.hasErrors())
        {
            return "loginForm";
        }
        return "success";
    }

    @RequestMapping(value="/{formName}")
    public String loginForm(@PathVariable String formName,Model model)
    {
        User user = new User();
        model.addAttribute("user", user);
        return formName;//动态页面的跳转,可以是任何页面
    }

}
 <context:component-scan base-package="com.controller"></context:component-scan>
        <context:component-scan base-package="com.validator"></context:component-scan>
       <mvc:annotation-driven></mvc:annotation-driven>
        <!-- 配置视图解析器 如何把handler 方法返回值解析为实际的物理视图 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix">
                <value>/WEB-INF/content/</value>
            </property>
            <property name="suffix">
                <value>.jsp</value>
            </property>
        </bean>

        <!-- 国际化 -->
        <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
            <property name="basenames">
                <list>
                    <!-- 在web环境中一定要定位到classpath,放在src目录下-->
                    <value>classpath:messages</value>
                </list>
            </property>
            <property name="useCodeAsDefaultMessage" value="false"/>
            <property name="defaultEncoding" value="UTF-8"/>
            <property name="cacheSeconds" value="60"/>
        </bean>
        <mvc:interceptors >
            <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean>
        </mvc:interceptors>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>测试Validation接口验证</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body>
    <h3>登录页面</h3>
    <form:form modelAttribute="user" method="post" action="login">
        <table>
            <tr>
                <td>登录名</td>
                <td><form:input path="loginname"/></td>
                <!-- 显示错误信息 -->
                <td><form:errors path="loginname" cssStyle="Color:red"></form:errors></td>
            </tr>
            <tr>
                <td>密码</td>
                <td><form:input path="password"/></td>
                <td><form:errors path="password" cssStyle="Color:red"></form:errors></td>
            </tr>
            <tr>
                <td><input type="submit" value="提交"/></td>
            </tr>
        </table>
    </form:form>
  </body>
</html>

时间: 2024-10-10 21:11:45

SpringMVC Validation验证(帖子最后有个问题,麻烦大神指点一下)的相关文章

SpringMVC 使用验证框架 Bean Validation(上)

SpringMVC 使用验证框架 Bean Validation(上) 对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证. SpringMVC 自身对数据在服务端的校验(Hibernate Validator)有一个比较好的支持,它能将我们提交到服务端的数据按照我们事先的约定进行数据有效性验证,对于不合格的数据信息 SpringMVC 会把它保存在错误对象中(Errors接口的子类),这些错误信息我们也可以通过 Spri

spring4.0整合了validation验证功能

今天翻译博客时 无意中发现的小知识点, 源地址:http://jinnianshilongnian.iteye.com/blog/1990081?page=2#comments Bean Validation 1.1当前实现是Hibernate validator 5,且spring4才支持.接下来我们从以下几个方法讲解Bean Validation 1.1,当然不一定是新特性: 集成Bean Validation 1.1到SpringMVC 分组验证.分组顺序及级联验证 消息中使用EL表达式

在系统中使用Bean Validation验证参数

转自:http://www.importnew.com/18561.html 为什么要使用Bean Validation? 当我们实现某个接口时,都需要对入参数进行校验.例如下面的代码 1 2 3 4 5 public String queryValueByKey(String parmTemplateCode, String conditionName, String conditionKey, String resultName) {         checkNotNull(parmTem

实现一个对象验证库系列 -- 3) Fluent以及扩展方法实现 (请大神批评)

前情回顾: 上一篇 2) 验证器实现 简单描述了下验证器的简单实现 本文将说说Fluent方式的实现,欢迎大神们指点指点 3) Fluent以及扩展方法实现 我们按照之前 Fluent 的设想以及我们解耦的方式,所以我们先实现一个创建验证器创建者的静态类: public static class Validation { public static IValidatorBuilder<T> NewValidatorBuilder<T>() // 创建验证器创建者 { return

实现一个对象验证库系列 -- 2) 验证器实现 (请大神批评)

前情回顾: 上一篇 1) 接口介绍以及总体思路概述 简单描述了下库的代码结构 本文将说说验证器实现,欢迎大神指导更快更好的方案 2) 验证器实现 我们首先从用户调用的验证器开始实现,所以我们应该首先这样做 public class Validator : IValidator { public IValidateResult Validate(ValidateContext context) { } } 但是我们的验证器不是没有规则嘛?回忆一下我们好像是在为 Fluent 设计时添加了一个验证器

小码哥Java大神班五期 任小龙SSM Spring5 Mybatis SpringMVC

详情请交流  QQ  709639943 00.小码哥Java大神班五期 任小龙SSM Spring5 Mybatis SpringMVC 00.Python玩转人工智能框架 TensorFlow 00.web开发级mysql颠覆实战课程 00.微信小游戏入门与实战 刷爆朋友圈 00.四大维度解锁 Webpack 3.0 前端工程化 00.前端成长必经之路-组件化思维与技巧 京东金融 01.从天气项目看Spring Cloud微服务治理 02.Java项目实战--报表开发(JasperRepor

SpringMVC数据验证——注册用户格式的验证实例

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 服务器端的数据验证,对于一个WEB应用来说是非常重要的,而Spring从3.0开始支持JSR-303规范,它定义了一些标准的验证约束,同时也提供了一个可扩展的自定义方式来满足不同的开发需要,大象以SSM3为基础,结合实例来说明如何通过Spring MVC用自定义约束注解的方式来实现Validator验证. validation-api是JSR-303规范的标准接口,hibernate-val

springMVC数据验证出现404错误解决办法

今天使用springMVC的数据验证的时候,看似很简单的东西,却有一个很大的陷阱:提交空表单的时候总是出现404错误,但是后台却不给你报任何错.遇到这个错误这个很苦恼,搞了几小时,今天记录并分享一下解决经验(本人使用注解式的数据验证): 错误例子: @RequestMapping(value="/login",method=RequestMethod.POST) public String login(@Valid @ModelAttribute("contentModel&

SpringMVC validator验证使用注意点

不论是使用Validator接口进行验证还是使用JSR-303 Validation进行验证,被验证的bean和前台页面显示的bean的变量名要相同,否则无法在<form:errors>标签中显示错误.如下图: 和 , 页面错误能正常显示. 和 , 因为map中存放的还是需要验证的方法参数emp,所以前台页面能正常显示错误. 如果是 和 , 因为map中存放的不是原来需要验证的方法参数emp,所以前台页面无法显示错误信息.