2009-10-31 41 views
17

我正在使用Spring表單庫來處理我的應用程序中的搜索頁面。下面是我的DD顯示bean配置一個剪斷:彈簧窗體 - 如何檢查特定路徑上的錯誤

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

Validator類是相當簡單:

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."); 
     } 
    } 
} 

在我的JSP中,我的形式顯示在一個HTML表格。我希望將字段特定的錯誤作爲單獨的表格行顯示在各自的字段下。這裏有一個片段:

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

我的問題是 - 我怎麼能使錯誤行的輸出有條件的存在的錯誤? Validator實例是否可以從我的JSP訪問?對於c:if標籤,測試會是什麼?

感謝,

-AJ

回答

34

OK,我花了幾天,但我想通了:

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

這篇文章是非常有幫助的: http://forum.springsource.org/archive/index.php/t-51044.html

1

我想this article描述你在良好的細節

需要什麼
+0

嗨, 感謝您的評論,但我沒有看到你提供的鏈接在哪裏使用Spring Form庫。如果您有任何有關Spring Form的信息,請發佈其他答案。謝謝! – 2009-10-31 14:26:16

7

使用<spring:hasBindErrors name="loginPasswordForm">

3

使用<spring:bind path="fieldName">和檢查status.error,看看現場有錯誤

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

<form:input path="" />必須是內<spring:bind >標籤

+0

我們如何使用這種方法來處理路徑?如果我在表單的開始處聲明'',那麼這將如何用於單個路徑? – 2014-02-17 09:31:04

+0

我發現的是form:輸入必須在''標籤內。這意味着每個路徑需要定義'' – Smith 2014-02-18 10:00:37

3

請檢查此代碼段

<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

其實有一個簡單的解決方案。 我從來沒有見過它,但在我看來,它是最簡單的一個。

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

當窗體:錯誤標籤有沒有身體它呈現與默認mecanism錯誤,但是當標籤有一個機構,它只是使身體是否有該路徑的錯誤。

+0

這似乎在servlet環境中工作,但在portlet環境中失敗。儘管如此,請參閱我的問題http://stackoverflow.com/q/35596690/637423 – Geert 2016-02-24 10:20:00