spring-mvc jsp表單提交 不同POJO的相同屬性[同名引數]
阿新 • • 發佈:2019-02-06
同名引數繫結問題
今天遇到一個在日常中不是那麼容易遇到的問題,但是被一個朋友問到了! 覺得以後還是可能會出現,所以記錄下解決方法.
表單的寫法
<form action="/test/samefield"method="POST" id="search">
<div class="col-sm-1" style="width:auto;">
<input type="text" class="form-control" name="query.test" value="${query.test}" placeholder="查詢">
<input type ="text" class="form-control" name="testQuery.test" value="${testQuery.test}" placeholder="測試">
<input type="submit" value="提交">
</div>
</form>
分別在CustomsQuery .java和TestQuery .java中了定義了test屬性
控制層寫法
@RequestMapping("/test/samefield")
public ModelAndView index(final ModelAndView mav, @ModelAttribute ("query") CustomsQuery query,
@ModelAttribute("testQuery") TestQuery testQuery) {
try {
Page<CustomsOrder> page = customsOrderService.selectPage(query);
Map<String, Object> model = mav.getModel();
model.put("testQuery", testQuery);
model.put("query" , query);
System.out.println(query.getTest());
System.out.println(testQuery.getTest());
} catch (Exception e) {
_logger.error(ExceptionUtil.getMsg(e));
}
mav.setViewName("/customservice/order/table");
return mav;
}
// ①將字首為query.的屬性繫結到 名稱為query的物件
@InitBinder("query")
public void initBinder1(WebDataBinder binder){
binder.setFieldDefaultPrefix("query.");
}
// ②將字首為testQuery.的屬性繫結到 名稱為testQuery的物件
@InitBinder("testQuery")
public void initBinder2(WebDataBinder binder){
binder.setFieldDefaultPrefix("testQuery.");
}
注意:
- 在Controller類新增兩個方法(①,②),作用是把指定的開頭識別符號的值賦給成指定名字的物件
- @ModelAttribute裡面的引數要跟上面定義的@InitBinder裡面的值對應,否則是取不到值的。