spring-mvc jsp表单提交 不同POJO的相同属性[同名参数]

来源:互联网 发布:淘宝宝贝口袋在哪 编辑:程序博客网 时间:2024/05/20 18:49

同名参数绑定问题

今天遇到一个在日常中不是那么容易遇到的问题,但是被一个朋友问到了! 觉得以后还是可能会出现,所以记录下解决方法.

表单的写法

<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里面的值对应,否则是取不到值的。
阅读全文
0 0
原创粉丝点击