Hibernate验证仅在保存而不是更新

时间:2015-12-02 16:22:56

标签: hibernate validation jsp

我在使用Spring和Hibernate验证进行表单验证时遇到了这个问题。

我有一个带注释验证的基本表单。 当我添加一个新对象时,我的验证工作正常,但是当我尝试更新现有对象时,验证的模型注释是有效的,因为che对象没有更新,但我在页面上没有错误,即使hasErrors为true。

我无法理解发生了什么......两种方法(保存和更新)都相似

我的控制器方法是:

// save New
    @RequestMapping(value = { path+"/new" } , method = RequestMethod.POST)
    public String saveLight(@Valid Luce luce, BindingResult result, ModelMap model, final RedirectAttributes redirectAttributes) {
        if (result.hasErrors()) {
            return path+"/luce";
        }
        // Add message to flash scope
        redirectAttributes.addFlashAttribute("css", "success");
        redirectAttributes.addFlashAttribute("msg", "Luce aggiunta correttamente");
        luceService.saveLuci(luce);
        return "redirect:/"+path+"/"+luce.getIdLuce();
        }

    // Save updated
        @RequestMapping(value =  path+"/{idLuce}", method = RequestMethod.POST)
        public String updateLuci(@Valid @ModelAttribute("luce") Luce luce, BindingResult result, ModelMap model, @PathVariable int idLuce, final RedirectAttributes redirectAttributes) {

            if (result.hasErrors()) {

                logger.debug("Has errors is "+result.hasErrors());
                return "redirect:/"+path + "/"+luce.getIdLuce();
            }
            redirectAttributes.addFlashAttribute("css", "success");
            redirectAttributes.addFlashAttribute("msg", "Luce modificata correttamente");

            luceService.updateLuci(luce);
            logger.debug("ho aggiornato");
            return "redirect:/"+path+"/"+luce.getIdLuce();

        }

JSP页面对于这两个操作是相同的,例如,

<spring:bind path="numeroLuce">
                <div class="form-group ${status.error ? 'has-error' : ''}">

                    <label class="col-sm-2 control-label" for="numeroLuce">Numero
                        Lampada</label>
                    <div>DEBUG: Status error is ${status.error}</div>
                    <div class="col-sm-10 form-field">
                        <form:input path="numeroLuce" id="numeroLuce" type="text"
                            class="form-control input-md" required="" />
                            <form:errors path="numeroLuce" cssClass="has-error" />
                    </div>
                </div>
            </spring:bind>

控制器上的记录器告诉我hasErrors是真的,但是在渲染页面时我得到了DEBUG:状态错误是错误的。这种情况只发生在我调用updateLuci方法时,而不是saveMethod,它们具有相同的JSP模板页面。

为什么他们表现得如此不同?

1 个答案:

答案 0 :(得分:0)

最后我找到了解决方案,我在这里写了以防有人遇到同样的问题...

问题出现在updateLuci方法的返回语句中。

它不是重定向,但我必须显示相同的表单视图。

所以它应该是

 if (result.hasErrors()) {
        return path+"/luce";
    }

希望这会有助于其他人