`
312350968
  • 浏览: 212580 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

spring mvc 参数绑定

 
阅读更多

转自:http://blog.csdn.net/lxf9601/article/details/5925810

 

刚开始用spring mvc 做web开发时,经常会不知道如何合适绑定页面数据.用惯struts2的朋友更认为spring mvc 绑定数据不如struts2方便(本人最开始也是这么认为),经过一段时间的应用和测试,总结出以下几种情况,希望对刚接触spring mvc 的朋友有所帮助.

示例程序下载

查看spring源码可以看出spring支持转换的数据类型已经很多了.

 

org.springframework.beans.PropertyEditorRegistrySupport.java

 

[java] view plaincopy
 
  1. /** 
  2.      * Actually register the default editors for this registry instance. 
  3.      */  
  4.     private void doRegisterDefaultEditors() {  
  5.         this.defaultEditors = new HashMap<Class, PropertyEditor>(64);  
  6.         // Simple editors, without parameterization capabilities.  
  7.         // The JDK does not contain a default editor for any of these target types.  
  8.         this.defaultEditors.put(Charset.classnew CharsetEditor());  
  9.         this.defaultEditors.put(Class.classnew ClassEditor());  
  10.         this.defaultEditors.put(Class[].classnew ClassArrayEditor());  
  11.         this.defaultEditors.put(Currency.classnew CurrencyEditor());  
  12.         this.defaultEditors.put(File.classnew FileEditor());  
  13.         this.defaultEditors.put(InputStream.classnew InputStreamEditor());  
  14.         this.defaultEditors.put(Locale.classnew LocaleEditor());  
  15.         this.defaultEditors.put(Pattern.classnew PatternEditor());  
  16.         this.defaultEditors.put(Properties.classnew PropertiesEditor());  
  17.         this.defaultEditors.put(Resource[].classnew ResourceArrayPropertyEditor());  
  18.         this.defaultEditors.put(TimeZone.classnew TimeZoneEditor());  
  19.         this.defaultEditors.put(URI.classnew URIEditor());  
  20.         this.defaultEditors.put(URL.classnew URLEditor());  
  21.         // Default instances of collection editors.  
  22.         // Can be overridden by registering custom instances of those as custom editors.  
  23.         this.defaultEditors.put(Collection.classnew CustomCollectionEditor(Collection.class));  
  24.         this.defaultEditors.put(Set.classnew CustomCollectionEditor(Set.class));  
  25.         this.defaultEditors.put(SortedSet.classnew CustomCollectionEditor(SortedSet.class));  
  26.         this.defaultEditors.put(List.classnew CustomCollectionEditor(List.class));  
  27.         this.defaultEditors.put(SortedMap.classnew CustomMapEditor(SortedMap.class));  
  28.         // Default editors for primitive arrays.  
  29.         this.defaultEditors.put(byte[].classnew ByteArrayPropertyEditor());  
  30.         this.defaultEditors.put(char[].classnew CharArrayPropertyEditor());  
  31.         // The JDK does not contain a default editor for char!  
  32.         this.defaultEditors.put(char.classnew CharacterEditor(false));  
  33.         this.defaultEditors.put(Character.classnew CharacterEditor(true));  
  34.         // Spring's CustomBooleanEditor accepts more flag values than the JDK's default editor.  
  35.         this.defaultEditors.put(boolean.classnew CustomBooleanEditor(false));  
  36.         this.defaultEditors.put(Boolean.classnew CustomBooleanEditor(true));  
  37.         // The JDK does not contain default editors for number wrapper types!  
  38.         // Override JDK primitive number editors with our own CustomNumberEditor.  
  39.         this.defaultEditors.put(byte.classnew CustomNumberEditor(Byte.classfalse));  
  40.         this.defaultEditors.put(Byte.classnew CustomNumberEditor(Byte.classtrue));  
  41.         this.defaultEditors.put(short.classnew CustomNumberEditor(Short.classfalse));  
  42.         this.defaultEditors.put(Short.classnew CustomNumberEditor(Short.classtrue));  
  43.         this.defaultEditors.put(int.classnew CustomNumberEditor(Integer.classfalse));  
  44.         this.defaultEditors.put(Integer.classnew CustomNumberEditor(Integer.classtrue));  
  45.         this.defaultEditors.put(long.classnew CustomNumberEditor(Long.classfalse));  
  46.         this.defaultEditors.put(Long.classnew CustomNumberEditor(Long.classtrue));  
  47.         this.defaultEditors.put(float.classnew CustomNumberEditor(Float.classfalse));  
  48.         this.defaultEditors.put(Float.classnew CustomNumberEditor(Float.classtrue));  
  49.         this.defaultEditors.put(double.classnew CustomNumberEditor(Double.classfalse));  
  50.         this.defaultEditors.put(Double.classnew CustomNumberEditor(Double.classtrue));  
  51.         this.defaultEditors.put(BigDecimal.classnew CustomNumberEditor(BigDecimal.classtrue));  
  52.         this.defaultEditors.put(BigInteger.classnew CustomNumberEditor(BigInteger.classtrue));  
  53.         // Only register config value editors if explicitly requested.  
  54.         if (this.configValueEditorsActive) {  
  55.             StringArrayPropertyEditor sae = new StringArrayPropertyEditor();  
  56.             this.defaultEditors.put(String[].class, sae);  
  57.             this.defaultEditors.put(short[].class, sae);  
  58.             this.defaultEditors.put(int[].class, sae);  
  59.             this.defaultEditors.put(long[].class, sae);  
  60.         }  
  61.     }  

 

 

 

1.基本数据类型

很简单,该怎么写就怎么写.

controller代码

 

[java] view plaincopy
 
  1. @RequestMapping  
  2.     public void test1(String name, Integer age, Double income, Boolean isMarried, String[] interests)  
  3.     {  
  4.         System.out.println("简单数据类型绑定=========");  
  5.         System.out.println("名字:" + name);  
  6.         System.out.println("年龄:" + age);  
  7.         System.out.println("收入:" + income);  
  8.         System.out.println("已结婚:" + isMarried);  
  9.         System.out.println("兴趣:");  
  10.         for (String interest : interests)  
  11.         {  
  12.             System.out.println(interest);  
  13.         }  
  14.         System.out.println("====================");  
  15.     }  

 

 

jsp代码

 

[xhtml] view plaincopy
 
  1. <form action="test1.do" method="post">  
  2.     <div class="f_left">姓名:</div>  
  3.     <div class="f_left"><input name="name" value="张三"/></div>  
  4.     <div class="clear"></div>  
  5.     <div class="f_left">年龄:</div>  
  6.     <div class="f_left"><input name="age" value="20"/></div>  
  7.     <div class="clear"></div>  
  8.     <div class="f_left">收入:</div>  
  9.     <div class="f_left"><input name="income" value="100000"/></div>  
  10.     <div class="clear"></div>  
  11.     <div class="f_left">结婚:</div>  
  12.     <div class="f_left">  
  13.     <input type="radio" name="isMarried" value="true" checked="checked"/>是  
  14.     <input type="radio" name="isMarried" value="false"/></div>  
  15.     <div class="clear"></div>  
  16.     <div class="f_left">兴趣:</div>  
  17.     <div class="f_left">  
  18.     <input type="checkbox" name="interests" value="听歌" checked="checked"/>听歌  
  19.     <input type="checkbox" name="interests" value="书法" checked="checked"/>书法  
  20.     <input type="checkbox" name="interests" value="看电影" checked="checked"/>看电影  
  21.     </div>  
  22.     <div class="clear"></div>  
  23.     <div><input type="submit" value="提交表单"/></div>  
  24. </form>  

 

 

 

2.简单对象类型

与基本类型相拟,只不过绑定到对象上更加简洁.(类拟struts的ActionForm)

controller代码

 

[java] view plaincopy
 
  1. @RequestMapping  
  2.     public void test2(User user)  
  3.     {  
  4.         System.out.println("简单对象类型绑定=========");  
  5.         System.out.println("名字:" + user.getName());  
  6.         System.out.println("年龄:" + user.getAge());  
  7.         System.out.println("收入:" + user.getIncome());  
  8.         System.out.println("已结婚:" + user.getIsMarried());  
  9.         System.out.println("========================");  
  10.     }  

 

 

user代码

 

[java] view plaincopy
 
  1. public class User {  
  2.     private String name;  
  3.     private Integer age;  
  4.     private Boolean isMarried;  
  5.     private Double income;  
  6.     private String[] interests;  
  7.       
  8.     public String getName() {  
  9.         return name;  
  10.     }  
  11.     public void setName(String name) {  
  12.         this.name = name;  
  13.     }  
  14.     public Integer getAge() {  
  15.         return age;  
  16.     }  
  17.     public void setAge(Integer age) {  
  18.         this.age = age;  
  19.     }  
  20.     public Boolean getIsMarried() {  
  21.         return isMarried;  
  22.     }  
  23.     public void setIsMarried(Boolean isMarried) {  
  24.         this.isMarried = isMarried;  
  25.     }  
  26.     public Double getIncome() {  
  27.         return income;  
  28.     }  
  29.     public void setIncome(Double income) {  
  30.         this.income = income;  
  31.     }  
  32.     public String[] getInterests() {  
  33.         return interests;  
  34.     }  
  35.     public void setInterests(String[] interests) {  
  36.         this.interests = interests;  
  37.     }  
  38. }  

 

 

jsp代码

 

[xhtml] view plaincopy
 
  1. <form action="test2.do" method="post">  
  2.         <div class="f_left">姓名:</div>  
  3.         <div class="f_left"><input name="name" value="lxf"/></div>  
  4.         <div class="clear"></div>  
  5.         <div class="f_left">年龄:</div>  
  6.         <div class="f_left"><input name="age" value="20"/></div>  
  7.         <div class="clear"></div>  
  8.         <div class="f_left">收入:</div>  
  9.         <div class="f_left"><input name="income" value="100000"/></div>  
  10.         <div class="clear"></div>  
  11.         <div class="f_left">结婚:</div>  
  12.         <div class="f_left">  
  13.         <input type="radio" name="isMarried" value="true" checked="checked"/>是  
  14.         <input type="radio" name="isMarried" value="false"/></div>  
  15.         <div class="clear"></div>  
  16.         <div class="f_left">兴趣:</div>  
  17.         <div class="f_left">  
  18.         <input type="checkbox" name="interests" value="听歌" checked="checked"/>听歌  
  19.         <input type="checkbox" name="interests" value="书法" checked="checked"/>书法  
  20.         <input type="checkbox" name="interests" value="看电影" checked="checked"/>看电影  
  21.         </div>  
  22.         <div class="clear"></div>  
  23.         <div><input type="submit" value="提交表单"/></div>  
  24.     </form>  

 

 

 

3.List类型绑定

网上很多人都给不出答案,关键在于,List需要绑定在对象(ActionForm),直接写在request-mapping函数的参数是不行的,更重要的一点是要创建对象(ArrayList).

controller代码

 

[java] view plaincopy
 
  1. @RequestMapping  
  2.     public void test3(Club club)  
  3.     {  
  4.         System.out.println("list类型绑定=========");  
  5.         System.out.println("会员:");  
  6.         for (User user : club.getUsers())  
  7.         {  
  8.             System.out.println(user.getName());  
  9.         }  
  10.         System.out.println("========================");  
  11.     }  

 

 

Club代码

 

[java] view plaincopy
 
  1. public class Club {  
  2.     private List<User> users = new ArrayList<User>();  
  3.       
  4.     public List<User> getUsers() {  
  5.         return users;  
  6.     }  
  7.       
  8.     public void setUsers(List<User> users) {  
  9.         this.users = users;  
  10.     }  
  11. }  

 

 

jsp代码

 

[xhtml] view plaincopy
 
  1. <form action="test3.do" method="post">  
  2.         <div class="f_left">会员1号:</div>  
  3.         <div class="f_left">  
  4.         <input name="users[0].name" value="张三"/>  
  5.         </div>  
  6.         <div class="clear"></div>  
  7.         <div class="f_left">会员2号:</div>  
  8.         <div class="f_left">  
  9.         <input name="users[1].name" value="李四"/>  
  10.         </div>  
  11.         <div class="clear"></div>  
  12.         <div class="f_left">会员3号:</div>  
  13.         <div class="f_left">  
  14.         <input name="users[2].name" value="王五"/>  
  15.         </div>  
  16.         <div class="clear"></div>  
  17.         <div><input type="submit" value="提交表单"/></div>  
  18.     </form>  

 

 

 

4.Set类型绑定

与List类型相似,经测试表明,绑定Set数据时,必须先在Set对象中Add相应的数量的模型对象.

controller代码

 

[java] view plaincopy
 
  1. @RequestMapping  
  2.     public void test4(Club2 club)  
  3.     {  
  4.         System.out.println("set类型绑定=========");  
  5.         System.out.println("会员:");  
  6.         for (User user : club.getUsers())  
  7.         {  
  8.             System.out.println(user.getName());  
  9.         }  
  10.         System.out.println("========================");  
  11.     }  


Club2代码

 

 

[java] view plaincopy
 
  1. public class Club2 {  
  2.     private Set<User> users = new LinkedHashSet<User>();  
  3.       
  4.     public Club2() {  
  5.         users.add(new User());  
  6.         users.add(new User());  
  7.         users.add(new User());  
  8.     }  
  9.       
  10.     public Set<User> getUsers() {  
  11.         return users;  
  12.     }  
  13.     public void setUsers(Set<User> users) {  
  14.         this.users = users;  
  15.     }  
  16. }  

 

 

 

jsp代码

 

[xhtml] view plaincopy
 
  1. <form action="test4.do" method="post">  
  2.         <div class="f_left">会员1号:</div>  
  3.         <div class="f_left">  
  4.         <input name="users[0].name" value="张三"/>  
  5.         </div>  
  6.         <div class="clear"></div>  
  7.         <div class="f_left">会员2号:</div>  
  8.         <div class="f_left">  
  9.         <input name="users[1].name" value="李四"/>  
  10.         </div>  
  11.         <div class="clear"></div>  
  12.         <div class="f_left">会员3号:</div>  
  13.         <div class="f_left">  
  14.         <input name="users[2].name" value="王五"/>  
  15.         </div>  
  16.         <div class="clear"></div>  
  17.         <div><input type="submit" value="提交表单"/></div>  
  18.     </form>  

 

 

 

5.Map类型绑定

最灵活的一种方式,可无限绑定未定义的参数,注意必须绑定在对象下(ActionForm).

controller代码

 

[java] view plaincopy
 
  1. @RequestMapping  
  2.     public void test5(UserForm userForm)  
  3.     {  
  4.         System.out.println("Map类型绑定=========");  
  5.         System.out.println("名字:" + userForm.getUser().get("name"));  
  6.         System.out.println("年龄:" + userForm.getUser().get("age"));  
  7.         System.out.println("收入:" + userForm.getUser().get("income"));  
  8.         System.out.println("已结婚:" + userForm.getUser().get("isMarried"));  
  9.         System.out.println("========================");  
  10.     }  

 

 

UserForm.java代码

 

[java] view plaincopy
 
  1. public class UserForm {  
  2.     private Map<String, String> userMap = new LinkedHashMap<String, String>();  
  3.     private User user = new User();  
  4.       
  5.     public Map<String, String> getUserMap() {  
  6.         return userMap;  
  7.     }  
  8.     public void setUserMap(Map<String, String> userMap) {  
  9.         this.userMap = userMap;  
  10.     }  
  11.     public User getUser() {  
  12.         return user;  
  13.     }  
  14.     public void setUser(User user) {  
  15.         this.user = user;  
  16.     }  
  17.       
  18. }  

 

 

jsp代码

 

[xhtml] view plaincopy
 
  1. <form action="test5.do" method="post">  
  2.         <div class="f_left">姓名:</div>  
  3.         <div class="f_left"><input name="user['name']" value="张三"/></div>  
  4.         <div class="clear"></div>  
  5.         <div class="f_left">年龄:</div>  
  6.         <div class="f_left"><input name="user['age']" value="20"/></div>  
  7.         <div class="clear"></div>  
  8.         <div class="f_left">收入:</div>  
  9.         <div class="f_left"><input name="user['income']" value="100000"/></div>  
  10.         <div class="clear"></div>  
  11.         <div class="f_left">结婚:</div>  
  12.         <div class="f_left">  
  13.         <input type="radio" name="user['isMarried']" value="true" checked="checked"/>是  
  14.         <input type="radio" name="user['isMarried']" value="false"/></div>  
  15.         <div class="clear"></div>  
  16.         <div><input type="submit" value="提交表单"/></div>  
  17.     </form>  

 

 

 

6.复合类型绑定

controller代码

 

[java] view plaincopy
 
  1. @RequestMapping  
  2.     public void test6(UserForm userForm)  
  3.     {  
  4.         System.out.println("复合类型绑定=========");  
  5.         System.out.println("名字:" + userForm.getUser().getName());  
  6.         System.out.println("年龄:" + userForm.getUser().getAge());  
  7.         System.out.println("收入:" + userForm.getUser().getIncome());  
  8.         System.out.println("已结婚:" + userForm.getUser().getIsMarried());  
  9.         System.out.println("========================");  
  10.     }  

 

 

UserForm代码

 

[java] view plaincopy
 
  1. public class UserForm {  
  2.     private Map<String, String> userMap = new LinkedHashMap<String, String>();  
  3.     private User user = new User();  
  4.       
  5.     public Map<String, String> getUserMap() {  
  6.         return userMap;  
  7.     }  
  8.     public void setUserMap(Map<String, String> userMap) {  
  9.         this.userMap = userMap;  
  10.     }  
  11.     public User getUser() {  
  12.         return user;  
  13.     }  
  14.     public void setUser(User user) {  
  15.         this.user = user;  
  16.     }  
  17.       
  18. }  

 

 

jsp代码

 

[xhtml] view plaincopy
 
  1. <form action="test6.do" method="post">  
  2.     <div class="f_left">姓名:</div>  
  3.     <div class="f_left"><input name="user.name" value="张三"/></div>  
  4.     <div class="clear"></div>  
  5.     <div class="f_left">年龄:</div>  
  6.     <div class="f_left"><input name="user.age" value="20"/></div>  
  7.     <div class="clear"></div>  
  8.     <div class="f_left">收入:</div>  
  9.     <div class="f_left"><input name="user.income" value="100000"/></div>  
  10.     <div class="clear"></div>  
  11.     <div class="f_left">结婚:</div>  
  12.     <div class="f_left">  
  13.     <input type="radio" name="user.isMarried" value="true" checked="checked"/>是  
  14.     <input type="radio" name="user.isMarried" value="false"/></div>  
  15.     <div class="clear"></div>  
  16.     <div><input type="submit" value="提交表单"/></div>  
  17. </form>  

 

 

分享到:
评论

相关推荐

    spring mvc 参数绑定漏洞

    3. **默认配置不当**:Spring MVC的默认配置可能允许过于宽松的数据绑定,例如允许空值绑定到非null字段,或者允许任意类型的参数绑定。 针对这些风险,开发者可以采取以下措施来增强Spring MVC应用的安全性: 1. *...

    第12章Spring MVC参数绑定的验证

    在Spring MVC中,对于如int、String等基本数据类型的请求参数,Spring MVC会自动将其与控制器方法的参数进行匹配和绑定。例如,一个GET请求中的查询参数`id=123`会被自动绑定到控制器方法的`int id`参数上。 2. **...

    springmvc 参数绑定例子

    通过在方法参数前加上`@RequestParam`并指定对应的参数名,Spring MVC会自动将请求中的相应参数值绑定到该方法参数上。例如: ```java @RequestMapping(value = "/save", method = RequestMethod.POST) public ...

    spring MVC数据绑定大全

    Spring MVC会自动将请求参数绑定到该对象的属性上。 ```java public class UserForm { private String username; private String password; // getters and setters } @RequestMapping(value = "/saveUser...

    Spring MVC数据绑定概述及原理详解

    在Spring MVC中,数据绑定是框架提供的一种强大的功能,它允许开发者轻松地将HTTP请求参数映射到控制器方法的参数上。这个过程不仅包括基本类型的绑定,还可以处理复杂的对象结构。以下是对Spring MVC数据绑定的深入...

    Spring MVC数据绑定大全.rar

    在Spring MVC框架中,数据绑定是一项核心功能,它允许开发者将HTTP请求参数、模型对象以及视图中的数据关联起来,简化了数据处理的过程。"Spring MVC数据绑定大全.rar"这个压缩包很可能包含了全面讲解Spring MVC数据...

    Spring Mvc参数传递例子

    Spring MVC传参是Spring学习中的比较容易混淆的地方,因为传参方式种类多,接受参数种类多,初学者较容易因为不懂HTTP参数传递原理,而摸不着头脑,该篇文章介绍Spring MVC参数绑定的几种方式。

    Spring MVC参数传递

    Spring MVC传参是Spring学习中的比较容易混淆的地方,因为传参方式种类多,接受参数种类多,初学者较容易因为不懂HTTP参数传递原理,而摸不着头脑,该篇文章介绍Spring MVC参数绑定的几种方式(包括json和普通文本)

    Spring MVC处理参数中的枚举类型通用实现方法

    "Spring MVC处理参数中的枚举类型通用实现方法" ...* Spring MVC参数绑定 * applicationcontext.xml文件配置 * @RequestParam注解的使用 标签:springmvc工作流程 springmvc 参数的枚举类型转换 springmvc参数绑定

    一篇文章弄懂Spring MVC的参数绑定

    Spring MVC 是一个强大的Java Web框架,它提供了许多功能,其中之一就是参数绑定。本文将深入探讨Spring MVC中的参数绑定,帮助开发者理解如何有效地处理客户端请求中的数据。 参数绑定的核心概念是将HTTP请求中的...

    Spring MVC jar包

    - **基本概念**:Spring MVC提供了一个灵活的MVC实现,包括请求映射、视图解析、模型绑定等功能。它通过DispatcherServlet作为前端控制器,负责接收请求并分发到相应的处理器。 - **组件**:主要包括Model、View、...

    springmvc 参数绑定例子1

    - **注解驱动**:Spring MVC使用注解如`@RequestParam`、`@PathVariable`、`@ModelAttribute`等来指定参数如何绑定。 - **模型属性**:`@ModelAttribute`注解通常用于将请求参数绑定到对象的属性上,这对于处理复杂...

    最全最经典spring-mvc教程

    Spring MVC还支持数据绑定,自动将请求参数绑定到Java对象,这极大地简化了表单提交的处理。对于验证,Spring MVC提供了BindingResult和Validator接口,用于校验模型数据的正确性。 另外,Spring MVC与Spring框架的...

    Spring MVC 4.2.3

    5. **数据绑定和验证**:Spring MVC提供强大的数据绑定功能,将HTTP请求参数自动映射到处理方法的参数,并支持JSR-303/JSR-349 Bean Validation标准进行数据验证。 6. **异常处理**:通过定义全局异常处理器,可以...

    Spring.MVC-A.Tutorial-Spring.MVC学习指南 高清可复制版PDF

    除此之外,Spring MVC还支持数据绑定、验证、本地化、主题、异常处理等功能。例如,使用@ModelAttribute注解可以将请求参数绑定到Controller方法的参数上,@Valid用于进行数据验证,Validator接口可以自定义验证逻辑...

    Spring MVC参数自动绑定List的解决方法

    Spring MVC 参数自动绑定 List 的解决方法 Spring MVC 参数自动绑定 List 的解决方法是一个常见的问题,在实际项目中,我们经常需要传入一组对象,而不是单个对象或数组。在 Spring MVC 中,参数自动绑定 List 的...

    SpringMVCDemo:Spring MVC 框架知识案例

    3.Spring MVC 请求参数的获取案例 4.Spring MVC 域对象共享数据案例 5.Spring MVC @ModelAttribute 注解案例 6.Spring MVC 国际化案例 7.Spring MVC 请求转发与请求重定向案例 8.Spring MVC 下载 Excel 文档的需求...

    Mastering Spring MVC 4(2015.09)源码

    总的来说,"Mastering Spring MVC 4(2015.09)源码"提供了深入学习Spring MVC的机会,你可以通过阅读和分析源码来了解如何配置DispatcherServlet、怎样编写控制器、如何进行数据绑定与验证,以及如何利用拦截器等特性...

    spring mvc 4.0

    6. **数据绑定与验证**:Spring MVC提供了数据绑定和验证功能,允许将表单数据自动绑定到Java对象,并进行校验,简化了业务逻辑处理。 7. **视图解析**:Spring MVC 4.0支持多种视图技术,如JSP、FreeMarker、...

Global site tag (gtag.js) - Google Analytics