SpringMVC与SiteMesh2.4无缝整合并借助JSR303规范实现表单验证

首先是web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7. <servlet>
  8. <servlet-name>user</servlet-name>
  9. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  10. <load-on-startup>1</load-on-startup>
  11. </servlet>
  12. <servlet-mapping>
  13. <servlet-name>user</servlet-name>
  14. <url-pattern>/</url-pattern>
  15. </servlet-mapping>
  16. <filter>
  17. <filter-name>sitemesh</filter-name>
  18. <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
  19. </filter>
  20. <filter-mapping>
  21. <filter-name>sitemesh</filter-name>
  22. <url-pattern>/*</url-pattern>
  23. </filter-mapping>
  24. <filter>
  25. <filter-name>SpringCharacterEncodingFilter</filter-name>
  26. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  27. <init-param>
  28. <param-name>encoding</param-name>
  29. <param-value>UTF-8</param-value>
  30. </init-param>
  31. </filter>
  32. <filter-mapping>
  33. <filter-name>SpringCharacterEncodingFilter</filter-name>
  34. <url-pattern>/*</url-pattern>
  35. </filter-mapping>
  36. </web-app>

然后是SpringMVC的配置文件user-servlet.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:mvc="http://www.springframework.org/schema/mvc"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  8. http://www.springframework.org/schema/mvc
  9. http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context-3.0.xsd">
  12. <context:component-scan base-package="com.jadyer"/>
  13. <!-- 如果ClassPath中有JSR-303的实现,例如Hibernate-Validator,则支持@Valid修饰的参数 -->
  14. <!-- JSR-303 support will be detected on classpath and enabled automatically -->
  15. <mvc:annotation-driven/>
  16. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  17. <property name="prefix" value="/WEB-INF/jsp/"/>
  18. <property name="suffix" value=".jsp"/>
  19. </bean>
  20. </beans>

然后是SiteMesh的配置文件decorators.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <decorators defaultdir="/WEB-INF/sitemesh/">
  3. <decorator name="main" page="basic.jsp">
  4. <pattern>/*</pattern>
  5. </decorator>
  6. </decorators>

接下来是SiteMesh用到的页面//WEB-INF//sitemesh//basic.jsp

  1. <%@ page language="java" pageEncoding="UTF-8"%>
  2. <%@ taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator"%>
  3. <h1>User Manager</h1>
  4. <hr/>
  5. <decorator:body/>

下面是含有表单的添加用户信息页面//WEB-INF//jsp//user//add.jsp

  1. <%@ page language="java" pageEncoding="UTF-8"%>
  2. <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
  3. <form:form method="POST" modelAttribute="user">
  4. username:<form:input path="username"/><form:errors path="username"/><br/>
  5. nickname:<form:input path="nickname"/><form:errors path="nickname"/><br/>
  6. password:<form:password path="password"/><form:errors path="password"/><br/>
  7. email:<form:input path="email"/><form:errors path="email"/><br/>
  8. <input type="submit"/>
  9. </form:form>

下面是表单验证通过后打印用户信息的页面//WEB-INF//jsp//user//list.jsp

  1. <%@ page language="java" pageEncoding="UTF-8"%>
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  3. <c:forEach items="${users}" var="user">
  4. ${user.value.username}----${user.value.nickname}----${user.value.password}----${user.value.email}
  5. <br/>
  6. </c:forEach>
  7. <a href="<%=request.getContextPath()%>/user/add">继续添加新用户</a>

接下来是使用注解处理表单验证细节的实体类User.java

  1. package com.jadyer.model;
  2. import javax.validation.constraints.Size;
  3. import org.hibernate.validator.constraints.Email;
  4. import org.hibernate.validator.constraints.NotEmpty;
  5. /**
  6. * User
  7. * @see ===================================================================================================
  8. * @see JSR303是JavaEE6中的一项子规范,叫做BeanValidation,它的官方参考实现是hibernate-validator
  9. * @see BeanValidation现在一共有两个规范:BeanValidation1.0(即JSR303)和BeanValidation1.1(即JSR349)
  10. * @see BeanValidation的官网是http://beanvalidation.org/
  11. * @see 关于JSR303的详细说明,请参考http://jcp.org/en/jsr/detail?id=303
  12. * @see 关于JSR349的详细说明,请参考http://jcp.org/en/jsr/detail?id=349
  13. * @see ===================================================================================================
  14. * @see JSR303规范主要用于对JavaBean中的字段的值的验证,使得验证逻辑从业务代码中脱离出来
  15. * @see JSR303定义了基于注解方式的JavaBean验证元数据模型和API,也可通过XML进行元数据定义,但注解会覆盖XML的定义
  16. * @see JSR303主要是对JavaBean进行验证,而没有指定方法级别(参数or返回值)、依赖注入等验证,因此催生了JSR349规范
  17. * @see JSR349规范目前处于草案状态,它主要支持依赖注入的验证和方法级别的验证(方法的参数和返回值)
  18. * @see Spring3.1目前已经完全支持依赖注入验证和方法级别的验证了,只不过不是原生的(JSR349规范还是草案嘛)
  19. * @see 关于这个的详细说明,可以参考此爷的文章http://www.iteye.com/topic/1123007
  20. * @see ===================================================================================================
  21. * @see 另外,Struts2已经可以很完美的和JSR303整合到一起了,呵呵,很是叫我欣慰啊!!!!
  22. * @see ===================================================================================================
  23. * @see 我们这里使用的是JSR303的hibernate-validator实现,它主要需要以下三个jar包
  24. * @see jboss-logging-3.1.0.CR2.jar
  25. * @see validation-api-1.0.0.GA.jar
  26. * @see hibernate-validator-4.3.0.Final.jar
  27. * @see ===================================================================================================
  28. * @author http://blog.csdn.net/jadyer
  29. * @create May 12, 2012 3:00:46 AM
  30. */
  31. public class User {
  32. @NotEmpty(message="姓名不能为空")
  33. private String username;
  34. private String nickname;
  35. @Size(min=3, max=10, message="密码长度必须大于3小于10")
  36. private String password;
  37. @NotEmpty(message="邮箱不能为空")
  38. @Email(message="邮箱格式不正确") //也可通过@Pattern(regexp="")书写正则来判断,二者都是JSR303规范中的
  39. private String email;
  40. public User() {}
  41. public User(String username, String nickname, String password, String email) {
  42. this.username = username;
  43. this.nickname = nickname;
  44. this.password = password;
  45. this.email = email;
  46. }
  47. public String getUsername() {
  48. return username;
  49. }
  50. public void setUsername(String username) {
  51. this.username = username;
  52. }
  53. public String getNickname() {
  54. return nickname;
  55. }
  56. public void setNickname(String nickname) {
  57. this.nickname = nickname;
  58. }
  59. public String getPassword() {
  60. return password;
  61. }
  62. public void setPassword(String password) {
  63. this.password = password;
  64. }
  65. public String getEmail() {
  66. return email;
  67. }
  68. public void setEmail(String email) {
  69. this.email = email;
  70. }
  71. }

最后是SpringMVC的控制器UserController.java

  1. package com.jadyer.controller;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import javax.validation.Valid;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.ui.Model;
  7. import org.springframework.validation.BindingResult;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RequestMethod;
  10. import com.jadyer.model.User;
  11. /**
  12. * @see ====================================================================================
  13. * @see SpringMVC中借助JSR303规范进行表单验证
  14. * @see 第一步:在实体类中针对需要验证的属性,进行Annotation配置
  15. * @see 第二步:在Controller的方法参数前使用@Valid开启JSR303验证,并添加BindingResult参数
  16. * @see        BindingResult承载着JSR303验证时所产生的message,可据此进行判断验证结果
  17. * @see 第三步:判断BindingResult中是否装载了JSR303验证的message,有则转到前台页面显示出来
  18. * @see 第四步:前台页面中使用<form:errors path="username"/>打印JSR303的message信息
  19. * @see ====================================================================================
  20. * @see SpringMVC与sitemesh2.4无缝整合
  21. * @see 第一步:拷贝sitemesh-2.4.jar到工程中
  22. * @see 第二步:在web.xml中配置com.opensymphony.sitemesh.webapp.SiteMeshFilter
  23. * @see 第三步:创建并编辑sitemesh配置文件decorators.xml
  24. * @see 第四步:创建并编辑/WEB-INF/sitemesh/basic.jsp
  25. * @see ====================================================================================
  26. * @author http://blog.csdn.net/jadyer
  27. * @create May 12, 2012 3:20:46 AM
  28. */
  29. @Controller
  30. @RequestMapping("/user")
  31. public class UserController {
  32. private final static Map<String,User> users = new HashMap<String,User>();
  33. @RequestMapping(value="/add", method=RequestMethod.GET)
  34. public String addUser(Model model){
  35. model.addAttribute(new User());
  36. return "user/add";
  37. }
  38. @RequestMapping(value="/add", method=RequestMethod.POST)
  39. public String addUser(@Valid User user, BindingResult binding){
  40. //该方法若有其它参数,应写成这样addUser(@Valid User user, BindingResult binding, String job)
  41. //就是说,这里一定要把BindingResult放在待验证对象(@Valid User user)参数的后面,否则会报错
  42. if(binding.hasErrors()){
  43. return "user/add";
  44. }
  45. users.put(user.getUsername(), user);
  46. return "redirect:/user/list";
  47. }
  48. @RequestMapping("/list")
  49. public String list(Model model){
  50. model.addAttribute("users", users);
  51. return "user/list";
  52. }
  53. }

补充:本示例的访问地址是http://127.0.0.1:8080/SpringMVC_study/user/add

本文转自  http://blog.csdn.net/jadyer/article/details/7574668

时间: 2024-10-25 19:31:04

SpringMVC与SiteMesh2.4无缝整合并借助JSR303规范实现表单验证的相关文章

Springmvc之表单验证

1.需要的相关jar 这里采用的是hibernate-validator-5.2.4.Final 和validation-api-1.1.0.Final 两个jar包.Hibernate Validator 是 Bean Validation 的参考实现, Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint.使用maven下载代码如下: 1 <dependency> 2 <groupI

SpringMVC表单标签简介

转自:SpringMVC表单标签简介 在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容.下面将对这些标签一一介绍. 在正式介绍SpringMVC的表单标签之前,我们需要先在JSP中声明使用的标签,具体做法是在JSP文件的顶部加入以下指令: <%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>

【转载】springMVC表单校验+全注解

在这篇文章中,我们将学习如何使用Spring表单标签, 表单验证使用 JSR303 的验证注解,hibernate-validators,提供了使用MessageSource和访问静态资源(如CSS,JavaScript,图片)国际化支持我们的视图,使用ResourceHandlerRegistry,全部采用基于注解的配置. 我们将创建一个包含一个学生注册表格的简单应用,用户输入表单提交验证通过 JSR303 的验证注释验证,通过覆盖属性文件可使用国际验证消息的默认消息,还访问静态资源(如应用引

SpringMVC&lt;from:form&gt;表单标签和&lt;input&gt;表单标签简介 转http://blog.csdn.net/hp_yangpeng/article/details/51906654

SpringMVC<from:form>表单标签和<input>表单标签简介 在使用SpringMVC的时候我们可以使用spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容.下面将对这些标签一一介绍. 在正式介绍SpringMVC的表单标签之前,我们需要先在JSP中声明使用的标签,具体做法是在JSP文件的顶部加入以下指令: Jsp代码 <%@taglib uri="http://www.springframework.org/tags/fo

SpringMVC学习记录(五)--表单标签

在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容.下面将对这些标签一一介绍. 1.引入标签头文件 在正式介绍SpringMVC的表单标签之前,我们需要先在JSP中声明使用的标签,具体做法是在JSP文件的顶部加入以下指令: <%@taglib prefix="sf" uri="http://www.springframework.org/tags/form" %> 2.form标签 使

基于SpringMVC与jquery的ajax提交表单的若干情况详解

在日常的业务中,我们往往使用的是ajax提交页面数据,而不用form的action来提交整个表单.现在我来分享一下我在日常工作中遇到的一些问题. 一.$.post.$.get.$.ajax三者的区别: 顾名思义,$.post和$.get分别是采用post方式和get方式向服务器发送请求.两者的不同是,get请求的参数是在url直接以url?name1=value1&name2=value2的形式拼接而成,而post请求的参数会以请求正文的形式传送到服务器,这个学习过javaweb知识的应该都知道

(转载)SPRINGMVC表单标签简介

SpringMVC表单标签简介 在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容.下面将对这些标签一一介绍. 在正式介绍SpringMVC的表单标签之前,我们需要先在JSP中声明使用的标签,具体做法是在JSP文件的顶部加入以下指令: Jsp代码   <%@taglib uri="http://www.springframework.org/tags/form" prefix="form" 

SpringMVC与Spring、Hibernate整合

本文采用正向工程1.搭建工程        工程名称:mvcsh2.添加支持的jar包        1).spring-3.2.0.jar 注:struts相关的jar不需要 \libs\*.jar com.springsource.org.aopalliance-1.0.0.jar            com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar            commons-logging.jar        2).

菜鸟级springmvc+spring+mybatis整合开发用户登录功能(上)

菜鸟级springmvc+spring+mybatis整合开发用户登录功能(上) 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(下)