您可以一次绑定表单物件的一个属性与数值,例如:
... <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>