這段時間重新開始拾起JAVA的學習也是為了以後的工作打算積累一些經驗
記得開始的時候學習Struts中的輸入校驗就對Vistor校驗器情有獨鐘首先一般我們在提交表單的時候對表單的各字段就要有校驗的過程實際部署過程中要分 客戶端校驗 和服務器端校驗 客戶端校驗使用rapid validation等第三方客戶端校驗框架就可以實現而且比Struts本身自帶的客戶端校驗方式更好但服務器端校驗卻可以分為好幾種
如果在Action中只有一個處理邏輯的話可以重寫ActionSupport中的validate()方法
如果在Action中存在多個類似於execute的處理邏輯的話我們可以重寫validateXxx()方法(Xxx為不同的處理邏輯名稱例如有validateRegist()方法就是處理Regist業務邏輯)
編寫對應於Action的validate 的xml文件這個應該是最為常用的一種解決方案了但是有一個問題Action眾多或者在Action中有多個對應一個或多個POJO的處理邏輯那麼這些xml文件就會隨著Action文件和處理邏輯的增加而相應的增加這顯然不是個好的現象 所以如果只是針對POJO來寫相應的validate xml文件無疑會好很多 這就是Visitor校驗器的功用了
很多和我一樣的初學者可能手邊都有一般李剛寫的 《Struts 權威指南》裡面正好講了visitor校驗器但是我照著書上講的步驟重復做了N次都沒有正確於是乎在網上搜索了相關的文章最後終於發現書上沒有講完整 (PP)
以下我來舉個例子
我建立了一個User的POJO處理邏輯為UserAction 測試頁面為loginjsp
loginjsp
<%@ page language=java pageEncoding=UTF%>
<%@ taglib prefix=s uri=/strutstags%>
<!DOCTYPE html PUBLIC //WC//DTD XHTML Transitional//EN
transitionaldtd>
<html xmlns=>
<head>
<meta httpequiv=ContentType content=text/html; charset=utf />
<title>用戶登錄頁面</title>
<link type=text/css rel=stylesheet />
</head>
<body>
<div id=all>
<div id=header>header</div>
<div id=content>
<s:form action=pro_logindo>
<s:textfield name=userusername label=用戶名稱 />
<s:password name=useruserpwd label=登錄密碼 />
<s:submit value=登 錄 />
</s:form>
</div>
<div id=footer>footer</div>
</div>
</body>
</html>
那麼我的Visitor校驗器為UserActionvalidationxml
<?xml version= encoding=UTF?>
<!DOCTYPE validators PUBLIC //OpenSymphony Group//XWork Validator //EN validatordtd>
<validators>
<field name=user>
<fieldvalidator type=visitor>
<param name=context>userContext</param>
<param name=appendPrefix>true</param>
<message></message>
</fieldvalidator>
</field>
</validators>
(注context參數可以隨便設置只要保持一致就可以了)
UseruserContextvalidationxml
<?xml version= encoding=UTF?>
<!DOCTYPE validators PUBLIC //OpenSymphony Group//XWork Validator //EN
validatordtd>
<validators>
<field name=username>
<fieldvalidator type=requiredstring>
<message>請輸入用戶名稱</message>
</fieldvalidator>
</field>
<field name=userpwd>
<fieldvalidator type=requiredstring>
<message>請輸入密碼</message>
</fieldvalidator>
</field>
</validators>
其中context參數將作為驗證User類屬性的文件名的一部分如user屬性返回一個User對象那麼用於驗證User對象屬性的文件名為Userabcvalidationxml
這個文件要和Userclass文件在同一個目錄中也就是要放到你的POJO文件相同的目錄路徑下不然的話Visitor校驗器就不會起作用
這個就是李剛老師沒有寫全的地方附加個項目截圖就更為清楚了
這樣的話Visitor校驗器就起作用了
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28465.html