2010-07-17 38 views
6

我一直在嘗試這一段時間,但找不到合適的解決方案。使用JSTL檢查彈簧綁定錯誤

我想使用JSTL來檢查是否存在發生在我的Spring MVC 2.5中的任何綁定錯誤(字段錯誤或全局錯誤)。

我知道我可以使用此代碼:

<p> 
    <spring:hasBindErrors name="searchItems"> 
     An Error has occured 
    </spring:hasBindErrors> 
</p> 

但我想使用JSTL來檢查任何錯誤。

我已經試過這一個使用JSTL:

<c:if test="${not empty errors}"> 
    An Error has occured 
</c:if> 

但似乎我無法正確地抓住它。

我需要使用JSTL,因爲JSP的其他部分依賴於存在或不存在綁定錯誤。

回答

6

至於說

我想使用JSTL檢查任何錯誤

只要使用(這只是工作於Spring MVC 2.5 - 不可移植的Spring MVC的3.0 雖然我假設它是requestScope ['bindingResult。<COMMAND_NAME_GOES_HERE> .allErrors']

<c:if test="${not empty requestScope['org.springframework.validation.BindingResult.<COMMAND_NAME_GOES_HERE>'].allErrors}"> 
    An Error has occured!!! 
</c:if> 

記住默認命令名稱是The 不合格的命令類名的第一個字母小寫。通知波紋管的命令名稱是寵物

private PetValidator petValidator = new PetValidator(); 

@RequestMapping(method.RequestMethod.POST) 
public void form(Pet command, BindingResult bindingResult) { 
    if(petValidator.validate(command, bindingResult)) { 
     // something goes wrong 
    } else { 
     // ok, go ahead 
    } 
} 

所以你的形式應該看起來像

<!--Spring MVC 3.0 form Taglib--> 
<form:form modelAttribute="pet"> 

</form:form> 
<!--Spring MVC 2.5 form Taglib--> 
<form:form commandName="pet"> 

</form:form> 

除非您使用@ModelAttribute

@RequestMapping(method.RequestMethod.POST) 
public void form(@ModelAttribute("command") Pet command, BindingResult bindingResult) { 
    // same approach shown above 
} 

這樣,你的表單應該看起來像

<!--Spring MVC 3.0 form Taglib--> 
<form:form modelAttribute="command"> 

</form:form> 
<!--Spring MVC 2.5 form Taglib--> 
<form:form commandName="command"> 

</form:form> 
3

事情是這樣的:

<spring:hasBindErrors name="userName"> 
    <c:set var="userNameHasError" value="true" /> 
</spring:hasBindErrors> 

<c:choose> 
    <c:when test="${userNameHasError}"> 
     <%-- Display username as textbox --%> 
    </c:when> 
    <c:otherwise> 
     <%-- Display username as label --%> 
    </c:otherwise> 
</c:choose> 

你或許可以也把設置錯誤趕上頁面(未經測試)上的所有錯誤:

<spring:hasBindErrors name="*"> 
    <c:set var="userNameHasError" value="true" /> 
</spring:hasBindErrors> 

享受!

3

玩弄<spring:hasBindErrors>標籤之後,我發現它有一定的限制:只有當有

  • 它是有用的錯誤。

  • org.springframework.validation.Errors對象只如果只是想知道是否有錯誤或沒有標籤

內部觸及。如果沒有錯誤,<spring:hasBindErrors>將變得毫無用處。在和我的同事做了一些研究之後,我們打印出了所有的請求屬性。原來,有一個叫做屬性:

org.springframework.validation.BindingResult.command

Command對象這裏是你的表單支持命令對象。 由於它可能被命名爲不直觀,因此此屬性擁有對我們的錯誤對象的引用。 因此,這個工程:

${requestScope['org.springframework.validation.BindingResult.command'].errorCount} 

,並給了我們一個手柄在人們所追求的錯誤在JSTL

對象