我有这种情况:
我的问题是当我在方法签名中添加错误对象时,我收到了这个错误:
在没有先前模型属性的情况下声明的错误/ BindingResult参数
代码:
@RequestMapping(value = "/addItemsToAsset.htm", method = RequestMethod.GET)
public String setupForm(@RequestParam("assetID") Long assetID,
Errors error, ModelMap model) {
AssetItemVo voAsset = null;
if (assetID != null && assetID != 0) {
//Get data for asset from DB using assetID
List<AssetDraftTempVo> lstDraft = service.getAssetDraftByLngID(assetID);
if (lstDraft.size() == 0) {
voAsset = new AssetItemVo();
// I wanted to add validation here. If no data for asset id is found, I would like to add an error to the error object
error.reject("123","Unable to find info for the asset in the database.");
} else {
AssetDraftTempVo voDraft = lstDraft.get(0);
voAsset = new AssetItemVo();
voAsset.setStrPlant(voDraft.getStrPlant());
.
. /*other DTO property here*/
.
}
}
model.put("assetItemDetail", voAsset);
return "additemstoasset";
}
我的目标是在显示表单期间,我想立即填充错误对象(如果有错误)
为清晰起见,这是我的表格。
<form:form modelAttribute="assetItemDetail" method="post">
<div id="error_paragraph">
<form:errors path="*" cssClass="errors" />
</div>
</form:form>
要超越错误,我手动更改方法签名并添加了模型属性,但仍然无法填充表单:错误标记
@RequestMapping(value = "/addItemsToAsset.htm", method = RequestMethod.GET)
public String setupForm(@RequestParam("assetID") Long assetID,
@ModelAttribute("assetItemDetail") AssetItemVo voAssetData, Errors error,
ModelMap model)
答案 0 :(得分:3)
如果要将BindingResult
与方法签名中不存在的模型属性相关联,可以手动执行:
BindingResult result = new Errors();
...
model.put(BindingResult.MODEL_KEY_PREFIX + "assetItemDetail", result);
model.put("assetItemDetail", voAsset);
答案 1 :(得分:2)
Spring MVC需要将一堆错误与模型上的某些对象相关联,因此<form:errors path="..." />
等标记将根据path
属性对应于模型对象。在这种情况下,它是通过在控制器方法中的Errors
参数之后直接查找ModelMap
参数来实现的。
尝试交换错误和模型方法参数,看看它是否清除了“没有先前模型属性声明的错误/ BindingResult参数”错误。
改变这个:
public String setupForm(@RequestParam("assetID") Long assetID,
@ModelAttribute("assetItemDetail") AssetItemVo voAssetData, Errors error,
ModelMap model)
到此:
public String setupForm(@RequestParam("assetID") Long assetID,
@ModelAttribute("assetItemDetail") AssetItemVo voAssetData, ModelMap model,
Errors error)