校驗檔案的搜尋規則
Struts 2的一個Action中可能包含了多個處理邏輯,當一個Action類中包含多個類似於execute的方法時,每個方法都是一個處理邏輯。不同的處理邏輯可能需要不同的校驗規則,Struts 2允許為不同控制邏輯指定不同校驗規則的支援。
當需要讓一個Action可以處理多個請求時,應該在配置該Action時指定method屬性。通過這種方式,就可以將一個Action處理類配置成多個邏輯Action。
在上面的Action類中增加一個login方法,該login方法不做任何處理,只是簡單地返回success字串。下面在struts.xml檔案中將該Action類配置成兩個邏輯Action。配置這兩個邏輯Action的配置片段如下。
程式清單:codes\04\4.2\overrideRule\WEB-INF\src\struts.xml
<!--配置一個名為*Pro的Action,
對應的處理邏輯為RegistAction的{1}方法-->
<action name="*Pro" class="org.crazyit.app.action.RegistAction"
假設上面兩個Action的校驗規則不同,註冊時的校驗規則還是之前的校驗規則,但登入的校驗規則需要增加的使用者名稱和密碼相同(這只是假設,實際應用中可能需要密碼和重複密碼相同,但不會要求使用者名稱和密碼相同)。
如果按之前的方式來指定校驗規則檔案,這個校驗規則檔案肯定分不清楚到底要校驗哪個處理邏輯。為了能精確控制每個校驗邏輯,Struts 2允許通過為校驗規則檔名增加Action別名來指定具體需要校驗的處理邏輯。即採用如下的形式:
<ActionClassName>-<ActionAliasName>-validation.xml
其中ActionClassName是Action處理類的類名,而ActionAliasName就是在struts.xml中配置該Action時所指定的name屬性。例如,如果我們需要為loginPro邏輯Action單獨指定校驗規則,則校驗檔案的檔名為RegistAction-loginPro-validation.xml(該檔案也需要與RegistAction的class檔案放在同一路徑下),該檔案的內容如下。
程式清單:codes\04\4.2\overrideRule\WEB-INF\src\org\crazyit\app\action\RegistAction-loginPro-validation.xml
<?xml version="1.0" encoding="GBK"?>
<!-- 指定Struts 2配置檔案的DTD資訊 -->
<!DOCTYPE validators PUBLIC
<!-- 校驗規則檔案的根元素 -->
<validators>
<!-- 校驗name屬性 -->
<!-- 使用表示式校驗器校驗name屬性 -->
<!-- 指定name屬性和pass屬性必須相等 -->
</validators>
上面的校驗規則檔案僅僅指定了Action的name屬性必須和pass屬性相同,那麼系統中原有的校驗規則對loginPro Action是否依然有效呢?
上面使用了表示式校驗器,關於各校驗器的具體用法,請參閱下一節的介紹。
本應用原來的表單頁稍作修改,讓該表單頁具有兩個按鈕,一個“登入”提交按鈕提交到loginPro,另一個“註冊”提交按鈕提交到registPro。如果使用者單擊“登入”提交按鈕,該表單將會提交到loginPro Action,那麼上面指定的RegistAction-loginPro-validation.xml校驗規則就會起作用了。如果校驗失敗,看到如圖4.17所示的校驗失敗頁面。
圖4.17 增加校驗規則
從圖4.17中可以看出,RegistAction-validation.xml檔案中的校驗規則,依然會對名為loginPro的Action起作用。實際上,名為loginPro的Action中包含的校驗規則是RegistAction-validation.xml和RegistAction- loginPro-validation.xml兩個檔案中規則的總和。
除此之外,還有一種情形——如果系統中包含了兩個Action:BaseAction和RegistAction,其中RegistAction繼承了BaseAction,且兩個Action都指定了對應的配置檔案,則RegistAction對應Action的校驗規則實際上是RegistAction-validation.xml和BaseAction-validation.xml兩個檔案中規則的總和。
假設系統有兩個Action:BaseAction和RegistAction,則系統搜尋規則檔案順序如下:
(1)BaseAction-validation.xml
(2)BaseAction-別名-validation.xml
(3)RegistAction-validation.xml
(4)RegistAction-別名-validation.xml
這種搜尋與其他搜尋不同的是,即使找到第一個校驗規則,系統還會繼續搜尋,不管有沒有這4份檔案,也不管是否找到配置檔案,系統總是按固定順序搜尋。
假如系統的struts.xml檔案中有如下配置片段:
<!-- 將RegistAction的login方法配置成一個邏輯Action -->
<action name="loginPro" class="org.crazyit.app.action.RegistAction" method="login">
</action>
如果上面的RegistAction類還繼承了BaseAction類,那麼上面這個名為login的Action的校驗規則是BaseAction-validation.xml、BaseAction-loginPro-validation.xml、RegistAction-validation.xml和RegistAction-loginPro-validation.xml 4份規則檔案裡規則的總和。
注意:
Struts 2搜尋規則檔案是從上而下的,實際用的校驗規則是所有校驗規則的總和。如果兩個校驗檔案中指定的校驗規則衝突,則後面檔案中的校驗規則取勝。
本文轉自 fkJava李剛 51CTO部落格,原文連結:http://blog.51cto.com/javaligang/882740 ,如需轉載請自行聯絡原作者
相關文章
- KVC搜尋規則
- SpringBoot專案校驗規則優化Spring Boot優化
- 檔案智慧搜尋
- win10搜尋檔案在哪裡 檢視搜尋檔案位置的方法Win10
- springMVC:校驗框架:多規則校驗,巢狀校驗,分組校驗;ssm整合技術SpringMVC框架巢狀SSM
- 精通 Linux 上的檔案搜尋Linux
- 前端Vue中常用rules校驗規則前端Vue
- 正整數表單校驗規則
- Vim模糊檔案搜尋fzf
- Mac pdf檔案搜尋工具Mac
- 檔案搜尋工具ProFind for MacMac
- ProFind for Mac(檔案搜尋工具)Mac
- 使用jakarta.validation自定義校驗規則
- element-ui自定義表單校驗規則及常用表單校驗UI
- ProFind for Mac(mac檔案搜尋工具)Mac
- 搜尋本地pdf檔案內容
- Scherlokk for Mac(檔案搜尋軟體)Mac
- HHDESK檔案內文字搜尋功能
- Find Any File for Mac(檔案搜尋)Mac
- Scherlokk for Mac檔案搜尋軟體Mac
- 檔案搜尋軟體:Scherlokk MacMac
- PDF Search for Macpdf檔案搜尋工具Mac
- 實用的檔案搜尋工具:ProFind for MacMac
- 詳解Linux指令與檔案的搜尋Linux
- Vue中form表單常用rules校驗規則VueORM
- sentinel流控規則校驗之原始碼分析原始碼
- web前端對檔案的引用規則Web前端
- 網站進行SEO搜尋引擎優化的七條規則網站優化
- 好用的檔案搜尋工具推薦:ProFind for MacMac
- EasyFind for Mac操作簡單的檔案搜尋工具Mac
- 搜尋引擎指南robots.txt檔案
- 檔案搜尋工具:Find Any File for MacMac
- pdf檔案搜尋工具:PDF Search MacMac
- PDF檔案搜尋工具PDF Search for MacMac
- PDF Search for Mac(pdf檔案搜尋工具)Mac
- rpm包的校驗和檔案讀取
- win10如何搜尋檔案或資料夾 win10怎麼全盤搜尋檔案Win10
- 功能強大的檔案搜尋工具:ProFind mac版Mac
- windows的檔案瀏覽器搜尋又變了Windows瀏覽器