自struts1.2.0,纔可以用通配符映射
在不使用通配符的常規做法中,我們要配置很多個ActionMapping,例子.:
<action path="/addSubscription"
type="org.apache.struts.webapp.example.EditSubscriptionAction"
name="subscriptionForm"
scope="request"
validate="false">
<forward name="failure" path="/failure.jsp"/>
<forward name="success" path="/subscriptionaddsuccess.jsp"/>
</action>
<action path="/editSubscription"
type="org.apache.struts.webapp.example.EditSubscriptionAction"
name="subscriptionForm"
scope="request"
validate="false">
<forward name="failure" path="/failure.jsp"/>
<forward name="success" path="/subscriptioneditsuccess.jsp"/>
</action>
使用通配符 ,可以寫成如下形式:
<action path="/*Subscription"
type="org.apache.struts.webapp.example.EditSubscriptionAction"
name="subscriptionForm"
scope="request"
validate="false">
<forward name="failure" path="/failure.jsp"/>
<forward name="success" path="/subscription{1}success.jsp"/>
</action>
使用通配符這段,關鍵點有兩處,
第一:path="/*Subscription",這裏使用了*來通配前面的add和edit,
第二:<forward name="success" path="/subscription{1}success.jsp"/> ,這裏使用{1}來表示*所代表的--也就是說,如果在頁面表單裏面這樣寫<form action="/editSubscription.do">,那麼forward到success的時候,就是forward到/subscriptioneditsuccess.jsp頁面。
現在詳細介紹一下通配符的用法。struts配置文件中<action>標籤的path屬性,可以使用下列三種通配符:
* :可以匹配0個或多個字符,但不能匹配"/"
** :可以匹配0個或多個字符,且可以匹配"/"
\character :用來轉譯*和\
通配符所代表的實際的值可以用{N}來引用,其中N可以等於0~9。N的含義是:
{0} 代表整個path代表的所有字符--不包括第一個/,如path=“/*Subscription”中的*是add,那麼{0}就是addSubscription。
{1} 代表第一個通配符(包括*, **, \character)所表示的實際內容,如path=“/*Subscription”中的*是add,那麼{1}就是add。
{2} 代表第二個通配符(包括*, **, \character)所表示的實際內容,如path=“/*Subscription*”中的第一個*是add而第二個*是test,那麼{1}就是add,{2}就是test
{3}~{9} 類似{1}, {2}
可以使用{N}的<action>屬性有:
type
name
roles
parameter
attribute
forward
include
input
可以使用{N}的<forward>屬性有:
path