說(shuō)明:該文翻譯自struts-2.0.8\docs\docs\validating-input.html。
在編寫Action這一章節(jié)中,我們通過(guò)幾行java代碼來(lái)驗(yàn)證username和password。當(dāng)然,在大型的應(yīng)用程序中,這將是個(gè)很耗時(shí)的工作,即使這幾行java代碼也可能變成維護(hù)的重大負(fù)擔(dān)。
令人高興的是,本框架提供了一個(gè)驗(yàn)證框架,這個(gè)驗(yàn)證框架能夠?qū)斎霐?shù)據(jù)進(jìn)行后臺(tái)驗(yàn)證。
一. 代碼
驗(yàn)證能夠通過(guò)XML文檔來(lái)描述,或者使用注解(annotations)。XML文檔的名稱以Action的名字為開頭,以“-validation”作為文件名后綴。當(dāng)我們想要驗(yàn)證Logon Action的時(shí)候,我們文件名可以命名為Logon-validation.xml。Logon-validation.xml的代碼如下:
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="username">
<field-validator type="requiredstring">
<message>Username is required</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message>Password is required</message>
</field-validator>
</field>
</validators>
在Logon.java后我們創(chuàng)建一個(gè)Logon-validation.xml文件。并將上述粘貼到該文件中。
頁(yè)面第一次顯示的時(shí)候,我們不想引發(fā)驗(yàn)證。我們需要在被告訴有輸入不正確前有機(jī)會(huì)輸入數(shù)據(jù)。通過(guò)驗(yàn)證的一種方式是找到一個(gè)ActionSupport基類提供的特定的“input”方法。為了這樣做,我們需要編輯Welcome頁(yè)面和Logon的映射。
Welcome.jsp的修改代碼如下:
<li><a href="<s:url action="Logon"/>">Sign On</a></li>
<li><a href="<s:url action="Logon_input"/>">Sign On</a></li>
struts.xml的修改代碼如下:
<action name="Logon" class="tutorial.Logon">
<action name="Logon_*" method="{1}" class="tutorial.Logon">
二. 代碼是如何工作的?
為了打開Logon表單,Welcome頁(yè)面涉及了Logon_input。
1. 框架將這個(gè)引用于Logon_*映射相匹配起來(lái);
2. “method={1}”屬性被“method=input”替換;
3. 框架調(diào)用了Logon Action類的input方法;
4. 因?yàn)?#8220;input”在一個(gè)特殊的方法的列表中,所以驗(yàn)證框架將不會(huì)調(diào)用;
5. 默認(rèn)的input方法返回一個(gè)“input”作為返回結(jié)果;
6. 框架展現(xiàn)“Logon.jsp”來(lái)作為回應(yīng)結(jié)果,沒(méi)有帶有任何的驗(yàn)證信息。
為了提交Logon表單,Login頁(yè)面引用了Logon。
1. 框架為目標(biāo)Action——Logon提供驗(yàn)證;
2. 找到Logon-validation.xml文件,框架為該類創(chuàng)建了一個(gè)驗(yàn)證對(duì)象,這個(gè)驗(yàn)證對(duì)象基于XML文件;
3. 驗(yàn)證器對(duì)輸入的數(shù)據(jù)產(chǎn)生作用;
4. 如果驗(yàn)證失敗,錯(cuò)誤信息被添加到內(nèi)部序列中;
5. 當(dāng)所有的驗(yàn)證器都已經(jīng)執(zhí)行后,如果框架發(fā)現(xiàn)有錯(cuò)誤信息產(chǎn)生,它尋找“input”結(jié)果對(duì)應(yīng)的頁(yè)面,而不調(diào)用Action類;
6. 如果通過(guò)驗(yàn)證,調(diào)用Action的方法,返回“success”對(duì)應(yīng)的結(jié)果。
三. 需要記住的東西
框架提供了一個(gè)驗(yàn)證框架。一個(gè)輸入域可以綁定一個(gè)驗(yàn)證器集合。如果驗(yàn)證失敗,框架將會(huì)返回輸入信息頁(yè),并顯示錯(cuò)誤信息。為了通過(guò)驗(yàn)證,一個(gè)特殊的“input”方法將被調(diào)用,來(lái)代替默認(rèn)的“execute”方法。
下一章:本地化輸出
上一章:選擇結(jié)果
posted on 2007-08-01 08:49
阿蜜果 閱讀(3967)
評(píng)論(2) 編輯 收藏 所屬分類:
Struts2