ITEEDU

数据绑定的几个方法

您可以一次绑定表单物件的一个属性与数值,例如:

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