SpringMVC 傳遞相同名稱的參數的最佳方法
SpringMVC 多個對象的相同字段參數傳遞解決方案,在SpringMVC中,有時需要傳遞多個對象(除了Model和web元素)
眾所周知,在SpringMVC中不支持類似struts2的點語法傳參法則,因此多個對象同名參數傳遞勢必會造成一定的問題。
-
SpringMVC的參數傳遞非常智能,可自動裝配參數到對象
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....
為了解決上述問題,有2中方案:
1.是建立一個DTO
優點是可以認為的避免參數的傳遞,直接改dto的字段名 u_name,u_id,f_name,f_id,gender,age,date,price都要列出來,然后作如下操作
然后修改表單字段和contoller
<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,拆分也很費力,因此不建議使用在數據量大的情況下
2.使用橋連接,將不同的部分專門封裝成一個對象(推薦)
優點:減少了沖突,減少了工作量
缺點:沖突字段/總字段趨近于1時顯得沒必要(不過,這種情況幾乎很少出現,除非是繼承關系,但繼承關系完全可以使用子類來傳值,所以這個問題你就當沒遇到過)
表單如下
<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的方案(不推薦,代碼量增加,靈活度不夠)
如下博文
try doing it
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!