WebWork2.2新特性(二):数据校验 validator

除经特别注明外,本站文章版权归JScud Develop团队或其原作者所有.
转载请注明作者和来源.  scud(飞云小侠)    欢迎访问 JScud Develop



WebWork2.2中去掉了原来的JavaScript支持,使用AJAX和DWR进行客户端校验.

DWR最新版本为1.0RC3a(2005-8-29),Webwork里面带的是0.6的版本.

如果使用客户端校验,首先在Web.xml里配置DWR:

    <servlet>
        <servlet-name>dwr</servlet-name>
        <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>true</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>dwr</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping> 



validators.xml的写法和原来一样,不过就是不能用原来的JavaScript的校验了(如果使用默认的validator,不需要这个文件)

 <validators> 
     <validator name="required"
         class="com.opensymphony.xwork.validator.validators.RequiredFieldValidator"/>
        
     <validator name="requiredstring"
         class="com.opensymphony.xwork.validator.validators.RequiredStringValidator"/>
 
     <validator name="stringlength"
      class="com.opensymphony.xwork.validator.validators.StringLengthFieldValidator"/>      
 </validators>

 

对action的校验规则写法也是和原来一样,例如增加新闻的校验如下:

 <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
 <validators>
  <field name="news.title">
   <field-validator type="requiredstring">
    <message>请输入标题</message>
   </field-validator>
  </field> 
  <field name="news.content">
   <field-validator type="requiredstring">
    <message>请输入内容</message>
   </field-validator>
  </field>
  
 </validators>  



在页面的Form标签中写上validate="true" (注意使用的是alt syntax语法)表示需要进行客户端校验,
如果不写validate="true"则不需要进行客户端校验,仅进行服务器端校验,这就和DWR无关了,和以前的客户端校验一样.

<ww:form action="doAddNews" method="post" name="doAddNews" validate="true"> 

 
 
还需要在WEB-INF下面增加一个dwr.xml配置DWR,如果使用webwork自带的dwr,格式如下

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 0.4//EN" "http://www.getahead.ltd.uk/dwr/dwr.dtd">
 <dwr>
     <allow>
         <create creator="new" javascript="validator" class="com.opensymphony.webwork.validators.DWRValidator"/>
         <convert converter="bean" match="com.opensymphony.xwork.ValidationAwareSupport"/>
     </allow>
 </dwr> 


如果使用DWR 1.0r3a(用新的版本不知道有没有问题),格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
 <allow>
  <create creator="new" javascript="validator" >
  <param name="class" value="com.opensymphony.webwork.validators.DWRValidator" />
  </create>
  <convert converter="bean" match="com.opensymphony.xwork.ValidationAwareSupport"/>
 </allow>
</dwr> 

(注:一定要使用匹配dwr和dwr.xml,否则会报错)


通过查看页面Html源码,我们可以看到页面中包含了/webwork和/dwr的路径,这些路径由Webwork和DWR自动生成文件返回,避免了在每个项目中复制重复的文件.

<script src="/ww22test/webwork/validationClient.js"></script>
<script src="/ww22test/dwr/interface/validator.js"></script>
<script src="/ww22test/dwr/engine.js"></script>
<script src="/ww22test/webwork/template/xhtml/validation.js"></script> 


其中字段使用onblur来进行调用校验:

<input type="text" name="news.title" value="" id="doAddNews_news.title" onblur="validate(this);"/> 

至此,Webwork的客户端校验可以运行起来了.

(实际操作中,DWR的校验可能还会有些问题,等待开发人员来进行修正了)

BUG发现:

目前发现当表单元素的名字没有.的时候(例如是"name"),DWR校验器工作正常,而如果类似上面的表单元素名字类似news.title,校验器工作不正常.

不知道是DWR的问题还是WebWork的问题,需要研究一下...

 

posted on 2005-08-29 18:50 Scud(飞云小侠) 阅读(1644) 评论(2)  编辑  收藏 所属分类: WEB

评论

# re: WebWork2.2新特性(二):数据校验 validator 2005-10-21 00:14 scud(飞云小侠)

bug已经修正,或者是我看错了.反正好了.  回复  更多评论   

# re: WebWork2.2新特性(二):数据校验 validator 2007-03-30 15:45 jetty

如果没有用WebWork,就简单的jsp 可以用DWR技术 实现验证吗?
可以发邮件:xlm_hz@126.com
  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2005年8月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

公告

文章发布许可
创造共用协议:署名,非商业,保持一致

我的邮件
cnscud # gmail


常用链接

留言簿(15)

随笔分类(113)

随笔档案(103)

相册

友情链接

技术网站

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜