Struts 2可以通过Validation XML定义文件的方式实现表单验证, 默认情况下是提交后才能显示验证信息, 那么Struts 2其实支持客户端生成脚本来在提交之前进行验证, 具体的修改很简单, 不需要动服务器端XML文件, 只需要在标签加入如下一个标记:
<s:form validate="true" … > 这样, 就会变成客户端验证方式, 不过我想可能不支持自定义的验证器. 当然了, Struts 还自带AJAX方式的验证.
第二个问题, 就是提交后验证, 可能会用Validation XML 文件或者覆盖 validate()方法来完成, 但是呢, 默认显示是多个出错信息加入 <li>的, 根据我的观察, 好多人做项目时还是不喜欢用Struts 的TAG, 主要还是排版太困难, DreamWeaver 不认账, 那么能否不用Struts 自带标签而用EL表达式显示验证出错信息呢?答案是肯定的, 具体做法如下:
<s:debug/> 这一行为了我们方便的观察ValueStack.
<form action="mixValid.action" method=post>
${errors.username[0]}
用户名
<input name="username" value="beansoft" >
原因嘛, 可以去看ValueStack的内容:
可以看到ValueStack中的errors和fieldErrors, 其组织方式是一个大Map, 格式为:
Map<String(表单域名), List[](出错信息)>, 因此可以通过EL表达式来获取其出错内容, 便于排版.
详细内容可参考BlogJava上的一篇文章: struts2中action和field级别错误处理, 下面一段代码:
1
public synchronized void addFieldError(String fieldName, String errorMessage)
{
2
final Map errors = internalGetFieldErrors();
3
List thisFieldErrors = (List) errors.get(fieldName);
4
5
if (thisFieldErrors == null)
{
6
thisFieldErrors = new ArrayList();
7
errors.put(fieldName, thisFieldErrors);
8
}
9
10
thisFieldErrors.add(errorMessage);
11
}