上述兩個action mapping調用的是同一個action類只是執行的方法不同而已並且所執行的方法名都是action mapping名字的開頭部分而且action mapping的名字除去方法名之後剩下的部分是一樣的這種情況下我們可以使用一個action mapping來代替上面兩個action mapping
<action name=
*Crud
class=
example
CrudAction
method=
{
}
>
匹配過程是這樣的 (以請求的action mapping的名字是editCrud為例)
● *可以表示任何內容因此任何以Crud結尾的action mapping都會匹配上
● 當editCrud匹配上後*的內容此時就是edit
● 調用名字為第一個*號的內容的方法此時僅有一個*號並且此時它的內容為edit因此action類的edit方法被調用了
● 同理如果請求的action是deleteCrud匹配成功後*的內容就是delete調用的方法就是delete了
使用通配符匹配方法可以讓我們減少配置文件的內容是配置更加簡潔
如果我們沒有給action元素指定class屬性的話框架會默認它的class屬性為comopensymphonyxworkActionSupport如果想指定別的類作為默認的Action類可以通過package的defaultactionref屬性來設置在設置了defaultactionref之後如果我們在package中沒有匹配到所請求的action那麼這個默認的action就會被調用一般一個命名空間下最好只定義一個默認的action
.Result元素配置
action類處理完一個請求後會返回一個字符串這個字符串將被用來選擇一個result元素通常一個action mapping會有多個result代表各個可能不同的結果ActionSupport中定義了幾個標准的result token如下所示
String SUCCESS =
success
;
String NONE =
none
;
String ERROR =
error
;
String INPUT =
input
;
String LOGIN =
login
;
通常我們都會自定義一些result token類匹配特定的情況
result元素負責完成兩個工作提供一個邏輯名用於與action類的返回字符串進行匹配提供一個返回類型(Result Type)盡管大多數的result只是簡單的轉向一個頁面或模板但是我們還可以利用其它的返回類型(Result Type)做其它的一些事情我們可以為每個包設置默認的返回類型(Result Type)如果一個包繼承了另外一個包它可以選擇設置自己的默認返回類型或者直接使用父包的設置默認返回類型的方式如下
<result
types>
<result
type name=
dispatcher
default=
true
class=
org
apache
struts
dispatcher
ServletDispatcherResult
/>
</result
types>
Result元素有兩個屬性name和type它們都是可選的name屬性的默認值是successtype的屬性為我們所設置的默認返回類型如上例中即為dispatcher
定義在action元素裡面的result我們可以稱之為局部result除此之外我們可以還可以全局的result這些result會被多個action所共享框架會首先尋找嵌套在action元素中的result如果沒有匹配的就去全局result中去尋找一個全局result的例子如下
<globalresults>
<result name=error>/Errorjsp</result>
<result name=invalidtoken>/Errorjsp</result>
<result name=login type=redirectaction>Logon!input</result>
</globalresults>
有時候我們的result在運行前可能是未知的比方說一個result它所跳轉的頁面取決於它所在action類的運行結果或者客戶端的輸入等等這時候我們可以使用動態的result也就是說result的值可以使用表達式語言(EL)來表示這個表達式的值是動態的取決於action的運行時狀況下面是一個例子
在上例中result的值將是它所在action的nextAction的屬性值nextAction屬性的值不同當action的方法返回next時所跳向的url也不同
[] []
From:http://tw.wingwit.com/Article/program/Java/ky/201311/29112.html