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