1. 程式人生 > >spring-mvc jsp表單提交 不同POJO的相同屬性[同名引數]

spring-mvc jsp表單提交 不同POJO的相同屬性[同名引數]

同名引數繫結問題

今天遇到一個在日常中不是那麼容易遇到的問題,但是被一個朋友問到了! 覺得以後還是可能會出現,所以記錄下解決方法.

表單的寫法

<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裡面的值對應,否則是取不到值的。