2010-07-17 32 views
6

Tôi đã thử cách này một lúc nhưng không thể tìm ra giải pháp phù hợp.Kiểm tra sử dụng JSTL liên quan đến lỗi ràng buộc mùa xuân

Tôi muốn sử dụng JSTL để kiểm tra xem có bất kỳ lỗi ràng buộc nào (lỗi trường hoặc lỗi chung) xảy ra trong Spring MVC 2.5 của tôi không.

Tôi biết tôi có thể sử dụng mã này:

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

Nhưng tôi muốn sử dụng JSTL để kiểm tra bất kỳ lỗi nào.

Tôi đã thử cái này sử dụng JSTL:

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

Nhưng dường như tôi không thể bắt nó một cách chính xác.

Tôi cần sử dụng JSTL vì có các phần khác của JSP dựa vào sự hiện diện hoặc vắng mặt của các lỗi liên kết.

Trả lời

6

Như đã nói

Tôi muốn sử dụng JSTL để kiểm tra cho bất kỳ lỗi nào

Chỉ cần sử dụng (Nó chỉ hoạt động trên Spring MVC 2.5 - Không di động cho Spring MVC 3,0 mặc dù tôi giả sử nó là 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> 

Hãy nhớ mặc định tên lệnh là Tên lớp lệnh không đủ tiêu chuẩn với Chữ cái đầu tiên lowercased. Thông báo tên lệnh dưới đây là vật nuôi

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 
    } 
} 

Vì vậy, hình thức của bạn nên trông giống như

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

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

</form:form> 

Trừ khi bạn sử dụng @ModelAttribute

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

Bằng cách này, hình thức của bạn nên trông giống như

<!--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

Something như thế này:

<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> 

Bạn có thể có lẽ cũng đặt một thiết lập các lỗi để bắt tất cả các lỗi trên trang (chưa được kiểm tra):

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

Thưởng thức!

3

Sau khi chơi xung quanh với <spring:hasBindErrors> thẻ, tôi thấy nó có những hạn chế nhất định:

  • Nó rất hữu ích khi có sai sót.

  • org.springframework.validation.Errors đối tượng là chỉ có thể bên trong thẻ

gì nếu chỉ muốn biết nếu có sai sót hay không. Nếu không có lỗi, <spring:hasBindErrors> sẽ hiển thị vô ích. Sau khi thực hiện một số nghiên cứu với đồng nghiệp của tôi, chúng tôi đã in ra tất cả các thuộc tính yêu cầu. Hóa ra đó là một thuộc tính gọi là:

org.springframework.validation.BindingResult.command

Đối tượng lệnh ở đây là đối tượng lệnh hình thức ủng hộ của bạn. Vì không trực quan vì nó có thể được đặt tên, thuộc tính này giữ một tham chiếu đến đối tượng Lỗi của chúng tôi. Như vậy, hoạt động này:

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

và cho chúng ta một tay cầm trên những mong đợi nhiều sau khi đối tượng lỗi trong JSTL

Các vấn đề liên quan