2009-10-31 1 views
17

Я использую библиотеку Spring Form для обработки страницы поиска в своем приложении. Вот это отрезала от моего DD показывает конфигурацию боба:Spring Forms - Как проверить ошибку на конкретном пути

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

Валидатор класс достаточно прост:

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

ОК у меня ушло несколько дней, но я понял это:

<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, отправьте другой ответ. Благодаря! –

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

То, что я нашел, является формой: входы должны находиться внутри тега ' '. Это означает, что для каждого пути вам нужно определить '' – Smith

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> 

Когда форма: ошибки тег не имеет тела, она оказывает ошибку с по умолчанию Механизма,, но когда тег имеет тело, он просто делает тело, если есть ошибка на этом пути.

+0

Кажется, что он работает в среде сервлета, но не работает в среде портлета. Тем не менее, все еще исследуя, см. Мой вопрос http://stackoverflow.com/q/35596690/637423 – Geert

Смежные вопросы