【发布时间】:2014-06-16 12:47:08
【问题描述】:
当像这样使用默认 ObjectName 时:
model.addAttribute(myObject);
BindingResult会将错误结果绑定到对应的输入路径,其对象名称为myObject。
但是,如果我像这样为我的对象使用新名称:
model.addAttribute("newObjectName",myObject);
BindingResult 仍会将其对象名称设置为 myObject,而不是“newObjectName”,并且结果错误不会被绑定。
那么,有什么方法可以在不将模型对象名称更改为默认值的情况下使 BindingResult 工作?
我的控制器
@RequestMapping(value="unit/unitAdd.do", method=RequestMethod.POST)
public final String saveUnitAdd(@Valid PmiUnit pmiUnit,Model model,BindingResult bindingResult,HttpServletRequest httpServletRequest,
HttpSession session){
logger.info("saveAddUnit called!");
boolean exists = unitService.isAlreadyExists("pmi_units", "uni_unit_name_pk",pmiUnit.getUniUnitNamePk());
if (exists) {
//exists and without state DEL, return exists error
logger.info("Unit Name_PK exists");
if(!unitService.isExistsAndDeleted("pmi_units", "uni_unit_name_pk",pmiUnit.getUniUnitNamePk())){
System.out.println("exists and not deleted");
bindingResult.rejectValue("uniUnitNamePk", "pmi.validator.constraints.unique");}
//exists but with state DEL, update this row
else{
unitService.updateDeletedUnit(pmiUnit);
mainService.getDefaultPmiUnit(pmiUnit, model);
httpServletRequest.setAttribute("fromAddUnit", "true");
httpServletRequest.setAttribute("addResult", "true");
model.addAttribute("pmiUnit",pmiUnit);
return "accessControl1/unit/unitManage";
}
}
//if has errors, return the same page
if (bindingResult.hasErrors()) {
model.addAttribute("pmiUnit",pmiUnit);
return "accessControl1/unit/unitAdd";
}
JSP 部分
<form:form method="POST" id="pmiAddUnit" name="pmiAddUnit"
modelAttribute="pmiUnit" enctype="multipart/form-data"
action="unitAdd.do">
...
<table>
<tr>
<td align="left"><form:input id="uniUnitNamePk" name="uniUnitNamePk" path="uniUnitNamePk" class="margin-right-ten" /></td>
<td align="left"><form:errors class="error" path="uniUnitNamePk" /></td>
</tr>
</table>
...
</form:form>
导入 **.domain.PmiUnit;
在域包中,pmiUnit 的类名为 PmiUnit。
因此,如果我将 modelAttribute 名称更改为“pmiUnitObject”。(嗯,只是我更喜欢这种方式,不喜欢名称不可更改的固定默认方式。而且,如果您添加多个对象,您应该可以使用.jsp 中的 ${variableName.propertyName} 之类的 bean)
我是这样修改的:
model.addAttribute("pmiUnitObject",pmiUnit);
这是调试过程中的变量 BindingResult:
..尴尬,无法发布图片....
不管怎样,在bindingResult.objectName中你会看到它仍然是“pmiUnit”,它不会将错误结果绑定到jsp form:errors标签中。
【问题讨论】:
-
发布您的方法签名,以及为什么要将对象(再次)添加到模型中,因为由于
@ModelAttribute注释,它应该已经存在。 -
请出示方法代码
标签: java spring spring-mvc