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

同名参数绑定问题

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

表单的写法

"/test/samefield"method="POST" id="search">
class="col-sm-1" style="width:auto;"> type="text" class="form-control" name="query.test" value="${query.test}" placeholder="查询"> type="text" class="form-control" name="testQuery.test" value="${testQuery.test}" placeholder="测试"> type="submit" value="提交">

分别在CustomsQuery .java和TestQuery .java中了定义了test属性

控制层写法

@RequestMapping("/test/samefield")
public ModelAndView index(final ModelAndView mav, @ModelAttribute("query") CustomsQuery query, 
                          @ModelAttribute("testQuery") TestQuery testQuery) {
    try {
        Page page = customsOrderService.selectPage(query);
        Map 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里面的值对应,否则是取不到值的。

你可能感兴趣的:(spring,框架)