代码之家  ›  专栏  ›  技术社区  ›  AJ.

Spring窗体-如何检查特定路径上的错误

  •  19
  • AJ.  · 技术社区  · 15 年前

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

    我的问题是-如何使错误行的输出以错误的存在为条件?验证程序实例是否可以从我的JSP访问?c:if标签的测试是什么?

    谢谢

    6 回复  |  直到 15 年前
        1
  •  39
  •   AJ.    15 年前

        <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

        2
  •  7
  •   Stewart    15 年前

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

        3
  •  5
  •   Smith    11 年前

    使用 <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 > 标签

        4
  •  3
  •   misbah    10 年前

    请检查此代码段

    <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>
    
        5
  •  3
  •   Jean-Francois Gillot    9 年前

    其实有一个简单的解决办法。

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

    当form:errors标记没有主体时,它会使用默认的mecanism来呈现错误,但是当标记有主体时,如果该路径有错误,它只会呈现主体。