BeanSoft's Java Blog
免费电子书/视频《MyEclipse 6 Java 开发中文教程》作者刘长炯官方博客

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的内容:

image

可以看到ValueStack中的errors和fieldErrors, 其组织方式是一个大Map, 格式为:

Map<String(表单域名), List[](出错信息)>, 因此可以通过EL表达式来获取其出错内容, 便于排版.

详细内容可参考BlogJava上的一篇文章: struts2中action和field级别错误处理, 下面一段代码:

1public 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    }

posted on 2008-11-28 11:30 BeanSoft 阅读(1238) 评论(1)  编辑  收藏 所属分类: Web Framework
Comments
  • # re: Struts 2不用标签显示表单验证出错信息及客户端验证[未登录]
    apple0668
    Posted @ 2008-11-29 10:38
    <s:form validate="true" … >,struts2这种支持客户端校验功能太弱,不能在form里面加theme=simple,而且出错信息排版不容易,个人认为尽量少用,尽量用js或者ajax等等来进行客户端校验。  回复  更多评论   

标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-11-28 11:55 编辑过
 
 

推荐图书:
走出软件作坊》、《悟透JavaScript》、《Head First 设计模式
相关链接:
网站导航: