我正在将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(模型)和JSP,该JSP可以看到该Class / Type但没有获取数据。顺便说一句,参考数据(例如refData.order.Types)正在传递到JSP。...
答案 0 :(得分:0)
holi.scheiserama这有效:
<form:select path="order.orderType.id"
tabindex="100" cssStyle="width:149px">
<form:option value="">none</form:option>
<form:options items="${refData.orderTypes }" itemValue="id" itemLabel="typeName" />
</form:select>
(危险肥皂盒时刻...)所以在我看来,具有用户定义类型的spring form标签现在可以不同地工作了(5.0.3 vs 2.5),很高兴在16小时前知道...希望可以使用ID的路径。...
答案 1 :(得分:0)
在路径中添加.id的想法实际上在完全加载和连接复杂模型的类型方面打破了后续文章(请参阅新的格式化程序(春季3之后)和旧的编辑器,等等)。正确的解决方法是向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