【问题标题】:Can't show proper error message after validation failure in Spring MVC在 Spring MVC 中验证失败后无法显示正确的错误消息
【发布时间】:2012-12-25 08:41:42
【问题描述】:

我刚开始使用 Spring MVC,无法在验证失败时显示正确的错误消息。

控制器是:

     @RequestMapping(value = "/MobiusDashboardWebsiteContent/csiBatchSubmission", method = RequestMethod.POST)
        @LogAction(actionPerformed = "submitCSIBatch")
        public String submitCSIBatch(ManualCSIBatch manualCSIBatch, BindingResult result, Model model, MobiusAuthenticationToken authToken) throws Throwable {

            ManualCSIBatch mBatch = new ManualCSIBatch();
            manualCSIBatch.setBatchUser(getUserName(authToken));
            csiBatchValidator.validate(manualCSIBatch, result);
            if (result.hasErrors()) {
                 LOG.error("Validation errors found for the batch " + manualCSIBatch.getBatchName() + " error code is " + manualCSIBatch.getErrorCode());  
model.addAttribute("localeList", localeList);
            model.addAttribute("evaluateAttributeList", evaluateAttibutes);
            model.addAttribute("csiBatchSubmission", manualCSIBatch);                
return "csiBatchSubmission";
            }
            mBatch.setErrorCode(StatusCode.SUCESS.getCode());
            model.addAttribute("csiBatchSubmission", mBatch);
            return "csiBatchSubmission";
        }

验证器是:

   @Override
    public void validate(Object target, Errors errors) {
        ManualCSIBatch manualCSIBatch = (ManualCSIBatch) target;
        boolean isDuplicate = getiMobiusService().checkDuplicateCSIBatchName(manualCSIBatch.getBatchName(), manualCSIBatch.getBatchUser());
        if (isDuplicate) {
            logger.debug("This is a duplicate batch " + manualCSIBatch.getBatchName() + " for this user " + manualCSIBatch.getBatchUser());
            errors.rejectValue("batchName", "errors.csi.duplicateBatch", new Object[] { manualCSIBatch.getBatchName() }, null);
        }

当验证失败时,一切正常,表单不提交但错误值未在 UI 上填充。

JSP 是这样的:

<div class="row">

    <label for="batch-name"><spring:message code="csi.label.batchname"/></label><form:input path="batchName" onkeyup="checkDuplciateBatch(this.value);" onblur="checkDuplciateBatch(this.value);"/> 
    <span id="availmsg" style="display:none"></span>
    <form:errors path="batchName" cssClass="error"/>
    </div>

在我看到的所有示例中,都是这样。这里可能有什么问题?

谢谢,

【问题讨论】:

    标签: validation model-view-controller spring-mvc uiviewcontroller


    【解决方案1】:

    所以我们开始吧。

    我知道 BindingResult 映射到每个模型属性。

    根据http://blog.nigelsim.org/2011/09/07/spring-mvc-validation-bindingresult/ 在模型对象之前添加@ModelAttribute 解决了问题!!惊人的! :)

    【讨论】:

      猜你喜欢
      • 2012-04-08
      • 2014-09-23
      • 2013-07-16
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 2017-03-11
      相关资源
      最近更新 更多