首页 > 编程语言 > 详细

SPRING IN ACTION 第4版笔记-第六章RENDERING WEB VIEWS-002- Spring的JSP标签之form标签

时间:2016-03-04 22:33:27      阅读:359      评论:0      收藏:0      [点我收藏+]

一、

Spring offers two JSP tag libraries to help define the view of your Spring MVC web views.

One tag library renders HTML form tags that are bound to a model attribute.

The other has a hodgepodge of utility tags that come in handy from time to time.

1.Spring支持的form标签

技术分享

 

技术分享

2.一般用法

 1 <%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %>
 2 <sf:form method="POST" commandName="spitter">
 3     First Name:
 4     <sf:input path="firstName" />
 5     <br/> Last Name:
 6     <sf:input path="lastName" />
 7     <br/> Email:
 8     <sf:input path="email" />
 9     <br/> Username:
10     <sf:input path="username" />
11     <br/> Password:
12     <sf:password path="password" />
13     <br/>
14     <input type="submit" value="Register" />
15 </sf:form>

path是和model里的对象的属性对应,commandName是和model的key对应,这里设定了commandName="spitter",则要保证每个返回到这个view的handler的model都要有值为"spitter"的key,所以showRegistrationForm()要修改,返回一个空对象,否则会报java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name ‘spitter‘ available as request attribute。

1 RequestMapping(value = "/register", method = GET)
2 public String showRegistrationForm(Model model) {
3     model.addAttribute(new Spitter());
4     return "registerForm";
5 }

3.Spring form标签还支持html5,如可以指定data、range、email

<sf:input path="email" type="email" />

4.显示错误

1 <sf:form method="POST" commandName="spitter">
2     First Name:
3     <sf:input path="firstName" />
4     <sf:errors path="firstName" />
5     <br/> ...
6 </sf:form>

若验证有错,会解析类似如下:

First Name: <input id="firstName" name="firstName" type="text" value="J"/>
            <span id="firstName.errors">size must be between 2 and 30</span>

5.可以加css

1 <sf:form method="POST" commandName="spitter">
2     First Name:
3     <sf:input path="firstName" />
4     <sf:errors path="firstName" cssClass="error" />
5     <br/> ...
6 </sf:form>
span.error {color: red;}

6.错误集中显示

<sf:form method="POST" commandName="spitter">
    <sf:errors path="*" element="div" cssClass="errors" /> 
    ...
</sf:form>
div.errors {
    background - color: #ffcccc;
    border: 2 px solid red;
}

7.哪个字段有错就红色显示该字段

1 <sf:form method="POST" commandName="spitter">
2     <sf:label path="firstName" cssErrorClass="error">First Name</sf:label>:
3     <sf:input path="firstName" cssErrorClass="error" />
4     <br/> ...
5 </sf:form>

8.要实体类中写验证规则

 1 package spittr;
 2 
 3 import javax.validation.constraints.NotNull;
 4 import javax.validation.constraints.Size;
 5 
 6 import org.apache.commons.lang3.builder.EqualsBuilder;
 7 import org.apache.commons.lang3.builder.HashCodeBuilder;
 8 import org.hibernate.validator.constraints.Email;
 9 
10 public class Spitter {
11 
12   private Long id;
13   
14   @NotNull
15   @Size(min=5, max=16, message="{username.size}")
16   private String username;
17 
18   @NotNull
19   @Size(min=5, max=25, message="{password.size}")
20   private String password;
21   
22   @NotNull
23   @Size(min=2, max=30, message="{firstName.size}")
24   private String firstName;
25 
26   @NotNull
27   @Size(min=2, max=30, message="{lastName.size}")
28   private String lastName;
29   
30   @NotNull
31   @Email
32   private String email;
33 
34   @Override
35   public boolean equals(Object that) {
36     return EqualsBuilder.reflectionEquals(this, that, "firstName", "lastName", "username", "password", "email");
37   }
38   
39   @Override
40   public int hashCode() {
41     return HashCodeBuilder.reflectionHashCode(this, "firstName", "lastName", "username", "password", "email");
42   }
43 
44 }

9.验证信息的资源文件,可定不同的语言版本支持国际化

1 firstName.size=First name must be between {min} and {max} characters long.
2 lastName.size=Last name must be between {min} and {max} characters long.
3 username.size=Username must be between {min} and {max} characters long.
4 password.size=Password must be between {min} and {max} characters long.
5 email.valid=The email address must be valid.

10.view

 1 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 2 <%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %>
 3 <%@ page session="false" %>
 4 <html>
 5   <head>
 6     <title>Spitter</title>
 7     <link rel="stylesheet" type="text/css" 
 8           href="<c:url value="/resources/style.css" />" >
 9   </head>
10   <body>
11     <h1>Register</h1>
12 
13     <sf:form method="POST" commandName="spitter" >
14       <sf:errors path="*" element="div" cssClass="errors" />
15       <sf:label path="firstName" 
16           cssErrorClass="error">First Name</sf:label>: 
17         <sf:input path="firstName" cssErrorClass="error" /><br/>
18       <sf:label path="lastName" 
19           cssErrorClass="error">Last Name</sf:label>: 
20         <sf:input path="lastName" cssErrorClass="error" /><br/>
21       <sf:label path="email" 
22           cssErrorClass="error">Email</sf:label>: 
23         <sf:input path="email" cssErrorClass="error" /><br/>
24       <sf:label path="username" 
25           cssErrorClass="error">Username</sf:label>: 
26         <sf:input path="username" cssErrorClass="error" /><br/>
27       <sf:label path="password" 
28           cssErrorClass="error">Password</sf:label>: 
29         <sf:password path="password" cssErrorClass="error" /><br/>
30       <input type="submit" value="Register" />
31     </sf:form>
32   </body>
33 </html>

11.controller

 1 package spittr.web;
 2 
 3 import static org.springframework.web.bind.annotation.RequestMethod.*;
 4 
 5 import javax.validation.Valid;
 6 
 7 import org.springframework.beans.factory.annotation.Autowired;
 8 import org.springframework.stereotype.Controller;
 9 import org.springframework.ui.Model;
10 import org.springframework.validation.Errors;
11 import org.springframework.web.bind.annotation.PathVariable;
12 import org.springframework.web.bind.annotation.RequestMapping;
13 
14 import spittr.Spitter;
15 import spittr.data.SpitterRepository;
16 
17 @Controller
18 @RequestMapping("/spitter")
19 public class SpitterController {
20 
21   private SpitterRepository spitterRepository;
22 
23   @Autowired
24   public SpitterController(SpitterRepository spitterRepository) {
25     this.spitterRepository = spitterRepository;
26   }
27   
28 //  @ModelAttribute
29 //  public Spitter spitter() {
30 //    return new Spitter();
31 //  }
32   
33   @RequestMapping(value="/register", method=GET)
34   public String showRegistrationForm(Model model) {
35     model.addAttribute(new Spitter());
36     return "registerForm";
37   }
38   
39   @RequestMapping(value="/register", method=POST)
40   public String processRegistration(
41       @Valid Spitter spitter, 
42       Errors errors) {
43     if (errors.hasErrors()) {
44       return "registerForm";
45     }
46     
47     spitterRepository.save(spitter);
48     return "redirect:/spitter/" + spitter.getUsername();
49   }
50   
51   @RequestMapping(value="/{username}", method=GET)
52   public String showSpitterProfile(@PathVariable String username, Model model) {
53     Spitter spitter = spitterRepository.findByUsername(username);
54     model.addAttribute(spitter);
55     return "profile";
56   }
57   
58 }

 

SPRING IN ACTION 第4版笔记-第六章RENDERING WEB VIEWS-002- Spring的JSP标签之form标签

原文:http://www.cnblogs.com/shamgod/p/5243527.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!