這段時間重新開始拾起JAVA的學習,也是為了以后的工作打算,積累一些經驗。
記得開始的時候,學習Struts2中的輸入校驗,就對Vistor校驗器情有獨鐘。首先,一般我們在提交表單的時候,對表單的各字段就要有校驗的過程,實際部署過程中要分 客戶端校驗 和服務器端校驗。 客戶端校驗使用rapid validation等第三方客戶端校驗框架就可以實現,而且比Struts2本身自帶的客戶端校驗方式更好,但服務器端校驗卻可以分為好幾種:
1.如果在Action中只有一個處理邏輯的話,可以重寫ActionSupport中的validate()方法。
2.如果在Action中存在多個類似于execute的處理邏輯的話,我們可以重寫validateXxx()方法(Xxx為不同的處理邏輯名稱,例如有validateRegist()方法,就是處理Regist業務邏輯)
3.編寫對應于Action的validate 的xml文件。這個應該是最為常用的一種解決方案了,但是有一個問題,Action眾多,或者在Action中有多個對應一個或多個POJO的處理邏輯,那么這些xml文件就會隨著Action文件和處理邏輯的增加而相應的增加,這顯然不是個好的現象。 所以如果只是針對POJO來寫相應的validate xml文件,無疑會好很多。 這就是Visitor校驗器的功用了。
很多和我一樣的初學者可能手邊都有一般李剛寫的 《Struts 2 權威指南》,里面正好講了visitor校驗器,但是我照著書上講的步驟重復做了N次都沒有正確,于是乎在網上搜索了相關的文章,最后終于發現書上沒有講完整 (P280-P281)
以下我來舉個例子:
我建立了一個User的POJO,處理邏輯為UserAction, 測試頁面為login.jsp
login.jsp
1 <%@ page language="java" pageEncoding="UTF-8"%>
2 <%@ taglib prefix="s" uri="/struts-tags"%>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5 <html xmlns="http://www.w3.org/1999/xhtml">
6 <head>
7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8 <title>用戶登錄頁面</title>
9 <link href="utils/css/public.css" type="text/css" rel="stylesheet" />
10 </head>
11 <body>
12 <div id="all">
13 <div id="header">header</div>
14 <div id="content">
15 <s:form action="pro_login.do">
16 <s:textfield name="user.username" label="用戶名稱" />
17 <s:password name="user.userpwd" label="登錄密碼" />
18 <s:submit value="登 錄" />
19 </s:form>
20 </div>
21 <div id="footer">footer</div>
22 </div>
23 </body>
24 </html>
那么我的Visitor校驗器為
UserAction-validation.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
3 <validators>
4 <field name="user">
5 <field-validator type="visitor">
6 <param name="context">userContext</param>
7 <param name="appendPrefix">true</param>
8 <message></message>
9 </field-validator>
10 </field>
11 </validators>
-------------------------------------------------------------------
(注:context參數可以隨便設置,只要保持一致就可以了)
-------------------------------------------------------------------
User-userContext-validation.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
3 "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
4 <validators>
5 <field name="username">
6 <field-validator type="requiredstring">
7 <message>請輸入用戶名稱</message>
8 </field-validator>
9 </field>
10 <field name="userpwd">
11 <field-validator type="requiredstring">
12 <message>請輸入密碼</message>
13 </field-validator>
14 </field>
15 </validators>
16
其中context參數將作為驗證User類屬性的文件名的一部分,如user屬性返回一個User對象,那么用于驗證User對象屬性的文件名為User-abc-validation.xml。
這個文件要和User.class文件在同一個目錄中。也就是要放到你的POJO文件相同的目錄路徑下,不然的話Visitor校驗器就不會起作用。
這個就是李剛老師沒有寫全的地方,附加個項目截圖就更為清楚了。

這樣的話,Visitor校驗器就起作用了。

posted on 2009-01-04 16:49
cometlj 閱讀(1922)
評論(2) 編輯 收藏