2015-10-05 41 views
1

我正在尋找一種方法來返回用於在JSP表單上顯示的非致命驗證「警告」消息(除了通常的驗證「錯誤」消息外)。這些將是允許處理繼續而不是阻止任務完成的消息。返回警告以及Spring MVC中的錯誤?

我想爲此使用現有的Spring 4 MVC管道:BindingResult對象,Spring Validator接口和Spring <form:errors />標記。但到目前爲止,我還沒有能夠計算出返回第二個BindingResult對象並獲取消息顯示的細節。

這裏是我到目前爲止有:

myFormValidator.validate(myForm, bindingResult); 
myFormValidator.validateWarnings(myForm, warnings); 
model.addAttribute("warnings",warnings); 
return new ModelAndView(FORM_VIEW, "myForm", myForm); 

但我不知道如何warnings扳平自由浮動BindingResult對象到<form:errors />標籤在JSP側。有人能幫忙嗎?

回答

0

看起來好像有一種簡單的方法可以使用現有的<form:errors />標籤來完成此操作。我最終做的是創建一個基於ErrorsTag.java及其超類的自定義標籤。

這裏是標籤的外觀:

<mytag:warnings bind="${warnings}" path="myFieldName" />

這將列出所有myForm.myFieldName在一個很好的風格塊的警告。

這裏是(可從http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/tags/form/AbstractHtmlElementTag.html獲得樣板)膽量:

protected boolean shouldRender() throws JspException { 
    try { 
     if (this.getPath() != null && 
       this.getPath() != "") { 
      // Field errors 
      return (this.bind.hasFieldErrors(this.getPath())); 
     } else { 
      // Global errors 
      return this.bind.hasGlobalErrors(); 
     } 
    } catch (IllegalStateException ex) { 
     // Neither BindingResult nor target object available. 
     return false; 
    } 
} 

protected int writeTagContent(TagWriter tagWriter) throws JspException{ 
    if (shouldRender()) { 
     return doWrite(tagWriter); 
    } 
    return BodyTag.SKIP_BODY; 
} 

protected int doWrite(TagWriter tagWriter) throws JspException { 
    try { 
     tagWriter.startTag(getElement()); 
     writeDefaultAttributes(tagWriter); 
     String delimiter = ObjectUtils.getDisplayString(evaluate("delimiter", getDelimiter())); 
     List<String> errorMessages = null; 
     if (this.getPath() != null) { 
      errorMessages = getFieldErrorMessages(bind.getFieldErrors(this.getPath())); 
     } else { 
      errorMessages = getGlobalErrorMessages(bind.getGlobalErrors()); 
     } 
     tagWriter.appendValue("<ul>"); 
     for (int i = 0; i < errorMessages.size(); i++) { 
      String errorMessage = errorMessages.get(i); 
      tagWriter.appendValue("<li>"); 
      tagWriter.appendValue(getDisplayString(errorMessage)); 
      tagWriter.appendValue("</li>"); 
     } 
     tagWriter.appendValue("</ul>"); 
     tagWriter.forceBlock(); 
     tagWriter.endTag(); 
    } catch (NullPointerException ex) { 
     ex.printStackTrace(); 
    } 

    return BodyTag.EVAL_BODY_INCLUDE; 
} 
+0

作爲一個方面說明,我需要的東西快 - 我敢肯定,這可以改善。 – user1071914