2009-10-31 23 views
17

Tôi đang sử dụng thư viện Biểu mẫu mùa xuân để xử lý trang tìm kiếm trong ứng dụng của mình. Dưới đây là một snipped từ DD tôi hiển thị cấu hình đậu:Biểu mẫu mùa xuân - Cách kiểm tra lỗi trên đường dẫn cụ thể

<bean name="/search.html" class="myapp.web.AccountSearchController"> 
     <property name="sessionForm" value="true"/> 
     <property name="commandName" value="searchAccounts"/> 
     <property name="commandClass" value="myapp.service.AccountSearch"/> 
     <property name="validator"> 
      <bean class="myapp.service.AccountSearchValidator"/> 
     </property> 
     <property name="formView" value="accountSearch"/> 
     <property name="successView" value="accountSearch"/> 
    </bean> 

lớp Các validator là khá đơn giản:

package myapp.service; 

import org.springframework.validation.Validator; 
import org.springframework.validation.Errors; 

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

public class AccountSearchValidator implements Validator { 

    /** Logger for this class and subclasses */ 
    protected final Log logger = LogFactory.getLog(getClass()); 

    public boolean supports(Class clazz) { 
     return AccountSearch.class.equals(clazz); 
    } 

    public void validate(Object obj, Errors errors) { 
     AccountSearch accountSearch = (AccountSearch) obj; 
     if (accountSearch == null) { 
      errors.rejectValue("domainName", "error.accountSearch.neither-specified", null, "Value required."); 
     } else if (accountSearch.getAccountId().isEmpty() && 
        accountSearch.getDomainName().isEmpty()) { 
      errors.rejectValue("domainName", "error.accountSearch.neither-specified", null, "Value required."); 
     } 
    } 
} 

Trong JSP của tôi, hình thức của tôi được hiển thị trong một bảng HTML. Tôi muốn các lỗi cụ thể của trường được hiển thị trong trường tương ứng dưới dạng một hàng bảng riêng biệt. Đây là một đoạn mã:

  <tr> 
       <td align="right" valign="top"><form:label path="domainName">Domain Name</form:label>:</td> 
       <td><form:input path="domainName" size="30"/></td> 
      </tr> 
      <tr> 
       <td>&nbsp;</td> 
       <td><form:errors path="domainName" cssClass="error"/></td> 
      </tr> 

Câu hỏi tôi có là - làm cách nào để tạo đầu ra của hàng lỗi có điều kiện về lỗi tồn tại? Cá thể Validator có thể truy cập từ JSP của tôi không? Thử nghiệm sẽ là gì đối với thẻ c: if?

Cảm ơn,

-aj

Trả lời

34

OK nó đã cho tôi một vài ngày nhưng tôi figured it out:

<c:set var="domainNameErrors"><form:errors path="domainName"/></c:set> 
    <c:if test="${not empty domainNameErrors}"> 
     <tr> 
      <td>&nbsp;</td> 
      <td>${domainNameErrors}</td> 
     </tr> 
    </c:if> 

Bài viết này rất hữu ích: http://forum.springsource.org/archive/index.php/t-51044.html

1

Tôi nghĩ this article mô tả những gì bạn cần trong các chi tiết tốt

+0

Xin chào, Cảm ơn nhận xét của bạn nhưng tôi không thấy vị trí trong liên kết bạn cung cấp rằng họ đang sử dụng thư viện Biểu mẫu mùa xuân. Nếu bạn có bất kỳ thông tin cụ thể nào cho Biểu mẫu mùa xuân, vui lòng đăng câu trả lời khác. Cảm ơn! –

7

Sử dụng <spring:hasBindErrors name="loginPasswordForm">

3

Sử dụng <spring:bind path="fieldName"> và kiểm tra status.error để xem nếu trường có lỗi

Ví dụ

<spring:bind path="phoneNumber"> 
    <form:input path="phoneNumber" /> 
    <form:errors path="phoneNumber" cssClass="error" /> 
    ${status.error ? 'has error' : ''} 
</spring:bind> 

Note

<form:input path="" /> phải bên <spring:bind > thẻ

+0

Làm thế nào chúng ta có thể sử dụng phương pháp này cho đường dẫn? Điều gì xảy ra nếu tôi khai báo '' ở đầu biểu mẫu, cách này sẽ được sử dụng cho từng đường dẫn như thế nào? –

+0

Điều tôi thấy là biểu mẫu: các đầu vào phải nằm trong thẻ ''. Điều này có nghĩa là đối với mỗi đường dẫn bạn cần định nghĩa '' – Smith

3

Vui lòng kiểm tra này phân đoạn mã

<spring:bind path="domainName"> 
    <c:if test="${status.error}"> 
    <tr> 
     <td>&nbsp;</td> 
     <td><form:errors path="domainName" cssClass="error"/></td> 
    </tr> 
    </c:if> 
</spring:bind> 
2

Thực ra có giải pháp đơn giản. Tôi chưa từng thấy nó ở bất cứ nơi nào nhưng có vẻ như với tôi rằng nó đơn giản nhất.

<tr> 
    <td align="right" valign="top"><form:label path="domainName">Domain Name</form:label>:</td> 
    <td><form:input path="domainName" size="30"/></td> 
</tr> 
<form:errors path="domainName"> 
<tr> 
    <td>&nbsp;</td> 
    <td><form:errors path="domainName" cssClass="error"/></td> 
</tr> 
</form:errors> 

Khi có dạng: thẻ lỗi không có cơ thể nó ám chỉ rằng lỗi với mecanism mặc định, nhưng khi thẻ có một cơ thể, nó chỉ làm cho cơ thể nếu có một lỗi cho con đường đó.

+0

Điều này có vẻ hoạt động trong môi trường servlet, nhưng thất bại trong môi trường portlet. Vẫn đang điều tra, xem câu hỏi của tôi http://stackoverflow.com/q/35596690/637423 – Geert

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