除經(jīng)特別注明外,本站文章版權歸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的校驗規(guī)則寫法也是和原來一樣,例如增加新聞的校驗如下:
<!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>請輸入內(nèi)容</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來進行調(diào)用校驗:
<input type="text" name="news.title" value="" id="doAddNews_news.title" onblur="validate(this);"/> |
至此,Webwork的客戶端校驗可以運行起來了.
(實際操作中,DWR的校驗可能還會有些問題,等待開發(fā)人員來進行修正了)
BUG發(fā)現(xiàn):
目前發(fā)現(xiàn)當表單元素的名字沒有.的時候(例如是"name"),DWR校驗器工作正常,而如果類似上面的表單元素名字類似news.title,校驗器工作不正常.
不知道是DWR的問題還是WebWork的問題,需要研究一下...