SpringMVC 传递相同名称的参数的最佳方法

SpringMVC 多个对象的相同字段参数传递解决方案,在SpringMVC中,有时须要传递多个对象(除了Model和web元素)java

众所周知,在SpringMVC中不支持相似struts2的点语法传参法则,所以多个对象同名参数传递势必会形成必定的问题。web


  1. SpringMVC的参数传递很是智能,可自动装配参数到对象spring

public class User{
 private String name;
 private String id;
 private String gender,
 private String age;
  //getter 和setter
}
----------------------------------
public class Food{
 private String name;
 private String id;
 private String price,
 private String date;
 //getter 和setter
}
-------
<form method='post' action='url'>
用户名 <input type='text' name='name'>
用户id <input type='text' name='id'>
食品名 <input type='text' name='name'>
食品id <input type='text' name='id'>
 <input type='text' name='gender'>
 <input type='text' name='age'>
 <input type='text' name='price'>
 <input type='text' name='date'>
</form>

--------
@requestMap(value={'/order/book'})
public string show(User u,Food f){}

在上述状况下User 和food都不能获得正确的name和id,或者说更本得不到,这要是struts2就方便多了,直接使用点语法 u.name,u.id,f.name,f.id....segmentfault


为了解决上述问题,有2中方案:mvc


1.是创建一个DTO

优势是能够认为的避免参数的传递,直接改dto的字段名 u_name,u_id,f_name,f_id,gender,age,date,price都要列出来,而后做以下操做post

而后修改表单字段和contollerui

<form method='post' action='url'>
用户名 <input type='text' name='u_name'>
用户id <input type='text' name='u_id'>
食品名 <input type='text' name='f_name'>
食品id <input type='text' name='f_id'>
 <input type='text' name='gender'>
 <input type='text' name='age'>
 <input type='text' name='price'>
 <input type='text' name='date'>
</form>

@requestMap(value={'/order/book'})
public string show(UserFoodDto dto){
//而后拆分,将字段
User u = new User();
Food f = new Food();

u.setName(dto.getUname());
f.setName(dto.getname());

u.setUid(dto.getUid());
f.setFid(dto.getFid());

u.setAge(dto.getAge);
f.setPrice(dto.getPrice);
.....
}

缺点是:若是数据量大,100百个字段,修改的地方天然越多,并且一个dto,拆分也很费力,所以不建议使用在数据量大的状况下url


2.使用桥链接,将不一样的部分专门封装成一个对象推荐

优势:减小了冲突,减小了工做量spa

缺点:冲突字段/总字段趋近于1时显得不必(不过,这种状况几乎不多出现,除非是继承关系,但继承关系彻底可使用子类来传值,因此这个问题你就当没遇到过)code


表单以下

<form method='post' action='url'>
用户名 <input type='text' name='u_name'>
用户id <input type='text' name='u_id'>
食品名 <input type='text' name='f_name'>
食品id <input type='text' name='f_id'>
 <input type='text' name='gender'>
 <input type='text' name='age'>
 <input type='text' name='price'>
 <input type='text' name='date'>
</form>

-----将冲突的字段专门创建一个javaBean
public String UFBridge{
    
    private String uname;
    private String uid;
    private String fname;
    private String fid;
}
--------------------------
@requestMap(value={'/order/book'})
public string show(User u,Food f,UFBridge ufb){

   u.setName(ufb.getUname());
   f.setName(ufb.getUname());
   
   u.setId(ufb.getUid);
   f.setId(ufb.getFid);
}


3.使用相应的注解@InitBinder,能够作出相似struts2的方案(不推荐,代码量增长,灵活度不够)

以下博文

SpringMVC同名参数绑定问题

springmvc注解形式的开发参数接收


try doing it

相关文章
相关标签/搜索