spring5 标签(输入,选择等)未显示模型的价值


问题内容

我正在将一个Web应用程序从SPring 2.5升级到Spring5。我的控制器在这里显示一个填充的模型对象。

@RequestMapping(value = "/es/orderinfo.html", method = RequestMethod.GET)
public ModelAndView initForm(
        @RequestParam("id") long id,
        HttpServletRequest request){


    Order order = getDAOFactory().getOrderDAO().load(id);

    OrderInfoBean bean = new OrderInfoBean();
    bean.setOrder(order);


    ModelAndView mv = new ModelAndView("es/orderinfo", "command", bean);
    return mv;

}

在我的JSP中,如果我在select的路径中输入错字,我会得到运行时错误,表明Spring运行时已正确验证了我的命令对象。正确的路径如下所示:

<form:select path="order.orderType"
        tabindex="100" cssStyle="width:149px">
        <form:option value="">none</form:option>
        <form:options items="${refData.orderTypes }" itemValue="id" itemLabel="typeName" />                                 
</form:select>

…但是15小时后,该模型的值未在任何输入字段,文本区域,输入,选择…中使用,所以以某种方式在GET映射控制器功能之间存在差距formBackingObject(模型)和看到该Class/Type但未获取数据的JSP。顺便说一句,参考数据(例如refData.order.Types)正在传递给JSP。


问题答案:

在路径中添加.id的想法实际上在完全加载和连接复杂模型的类型方面打破了后续文章(请参阅新的格式化程序(spring3之后)和旧的编辑器,等等)。正确的解决方法是向CapType类添加equals和hashcode函数,如下所示:

 @Override
    public boolean equals(final Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        final CapType capType = (CapType) o;
        return Objects.equals(id, capType.id) &&
        Objects.equals(typeName, capType.getTypeName());
    }
   @Override
   public int hashCode() {
       return Objects.hash(id, typeName);
   }

感谢您从此处获得的提示http://springinpractice.com/2012/01/07/making-formselect-work-
nicely-using-
spring-3-formatters