繁体   English   中英

在GET METHOD弹簧注释的控制器上添加错误

[英]Add Error on GET METHOD Spring annotated controller

我有这种情况:

  1. 我向用户显示资产列表。
  2. 用户选择一种资产,然后单击添加项
  3. 在我的请求映射中,在GET操作期间。 我使用服务类来检查该资产是否确实仍然存在于数据库中
  4. 如果没有,应通过消息通知用户。 我使用form:error标签

我的问题是,当我在方法签名中添加错误对象时,出现以下错误:

声明的错误/ 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>

为了克服该错误,我手动更改了方法签名并添加了model属性,但仍然无法填充form:error标记

@RequestMapping(value = "/addItemsToAsset.htm", method = RequestMethod.GET)
public String setupForm(@RequestParam("assetID") Long assetID,
        @ModelAttribute("assetItemDetail") AssetItemVo voAssetData, Errors error,
        ModelMap model) 

如果要将BindingResult与方法签名中不存在的模型属性相关联,可以手动进行操作:

BindingResult result = new Errors();
...
model.put(BindingResult.MODEL_KEY_PREFIX + "assetItemDetail", result); 
model.put("assetItemDetail", voAsset); 

Spring MVC需要将大量错误与模型上的某些对象相关联,因此<form:errors path="..." />标签将根据path属性对应于模型对象。 在这种情况下,它是通过在控制器方法中的ModelMap参数之后直接查找Errors参数来实现的。

尝试交换错误和模型方法参数,并查看它是否清除了“声明的Errors / 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) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM