我正在使用Spring Form库来处理我的应用程序中的搜索页面。这是从我的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>
验证器类非常简单:
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> </td>
<td><form:errors path="domainName" cssClass="error"/></td>
</tr>
我遇到的问题是 - 如何根据错误的存在使错误行的输出成为条件?是否可以从我的JSP访问Validator实例? c:if标签的测试是什么?
谢谢,
-AJ
答案 0 :(得分:36)
好的,我花了几天时间,但我想出来了:
<c:set var="domainNameErrors"><form:errors path="domainName"/></c:set>
<c:if test="${not empty domainNameErrors}">
<tr>
<td> </td>
<td>${domainNameErrors}</td>
</tr>
</c:if>
这篇文章非常有帮助: http://forum.springsource.org/archive/index.php/t-51044.html
答案 1 :(得分:7)
使用<spring:hasBindErrors name="loginPasswordForm">
答案 2 :(得分:4)
使用<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 >
代码
答案 3 :(得分:3)
请检查此代码段
<spring:bind path="domainName">
<c:if test="${status.error}">
<tr>
<td> </td>
<td><form:errors path="domainName" cssClass="error"/></td>
</tr>
</c:if>
</spring:bind>
答案 4 :(得分: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> </td>
<td><form:errors path="domainName" cssClass="error"/></td>
</tr>
</form:errors>
当form:errors标签没有主体时,它会使用默认的mecanism呈现错误,但是当标签有一个主体时,如果该路径出现错误,它只会呈现主体。
答案 5 :(得分:1)
我认为this article详细描述了您需要的内容