您可以一次绑定表单物件的一个属性与数值,例如:
...
<spring:bind path="command.username">
名称 <input type="text" name="${status.expression}" value="${status.value}"/><br>
</spring:bind>
<spring:bind path="command.password">
密码 <input type="password" name="${status.expression}" value="${status.value}"/><br>
</spring:bind>
...
"expression"会显示被绑定的属性名称,而 value 则显示被绑定的属性值。 或者是这么绑定 Command:
...
<spring:bind path="command">
名称 <input type="text" name="username" value="${command.username}"/><br>
密码 <input type="password" name="password" value="${command.password}"/><br>
</spring:bind>
...
对于错误讯息,之前用 BindException 中的 reject()方法,这个方法并不会区分特定栏位错误 讯息,您可以使用 rejectValue()方法来加入错误讯息:
rejectValue(String field, String errorCode,Object[] errorArgs, String defaultMessage) rejectValue(String field, String errorCode, String defaultMessage)
rejectValue()的 field 参数让您指定表单物件的属性,errorCode 参数指定资源档案中的键 (Key),errorArgs 参数用于指定资源档案中的占位字元,而预设讯息则是使用于找不到资源 档案时所要呈现的预设讯息。一个使用例子如下:
....
public void ModelAndView(....,
BindException errors) throws Exception {
... errors.rejectValue( "username", "error", null, "使用者名称错误");
...
errors.rejectValue( "password", "error", null, "密码错误");
}
...
return new ModelAndView(this.getFormView(), errors.getModel());
如上面的程式片段中加入之讯息,可以使用绑定标签来呈现讯息:
...
<spring:bind path="command.username">
名称 <input type="text"
name="${status.expression}" value="${status.value}"/><br>
<font color="red">${status.errorMessage}</color>
</spring:bind>
<spring:bind path="command.password">
密码 <input type="password" name="${status.expression}" value="${status.value}"/><br>
<font color="red">${status.errorMessage}</color>
</spring:bind>
...
相应的错误讯息会绑定至相关的栏位上,如果同一个属性上被绑定了错误讯息,则可以使用 ${status.errorMessages}取出,可以搭配 JSTL 来输出讯息,例如:
...
<spring:bind path="command.username">
名称 <input type="text" name="${status.expression}" value="${status.value}"/><br>
<c:if test="${status.error}">
<font color="red">
错误:<br>
<c:forEach items="${status.errorMessages}" var="error">
<c:out value="${error}"/><br>
</c:forEach>
</font>
</c:if>
</spring:bind>
...
${status.error}可以用于测试是否有错误讯息,也可以使用<spring:hasBindErrors>来决定是 否输出某些内容,例如:
... <spring:hasBindErrors> 发现以下的错误,请更正。。。 ...... </spring:hasBindErrors> ...
或者您也可以不区分表单物件属性,一次输出所有的错误讯息,例如:
....
<spring:bind path="command.*">
<font color="red">
错误:<br>
<c:forEach items="${status.errorMessages}" var="error">
<c:out value="${error}"/><br>
</c:forEach>
</font>
</spring:bind>