SpringMVC 多个对象的相同字段参数传递解决方案,在SpringMVC中,有时须要传递多个对象(除了Model和web元素)java
众所周知,在SpringMVC中不支持相似struts2的点语法传参法则,所以多个对象同名参数传递势必会形成必定的问题。web
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
优势是能够认为的避免参数的传递,直接改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
优势:减小了冲突,减小了工做量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); }
以下博文
try doing it