1. 程式人生 > >Action萬用字元使用

Action萬用字元使用

在以前的學習中,<action>元素的配置,都是用明確的配置,其name、class等屬性都是一個明確的值。其實Struts2還支援class屬性和method屬性使用來自name屬性的萬用字元。

  1)接下來看看使用萬用字元的示例,如果我們使用以下<action>配置:

<action name="*_*" class="cn.javass.action.action.{1}Action" method="{2}">  
     <result name="toWelcome">/s2impl/welcome.jsp</result>
</action>

在上面的配置中:

       name屬性的值中“*”代表長度不為0的任意字串,因此,它可以響應的action只需要名稱中間有一個下劃線即可。比如頁面可訪問的action名稱為:HelloWorld_create.action、HelloWorld _update.action等等。

       在name屬性定義了萬用字元之後,class屬性使用第一個萬用字元(使用{1}作為佔位),method屬性使用第二個萬用字元。

       如果使用HelloWorld_create.action作為訪問的action名稱的話,struts.xml中action名稱為HelloWorld_create,第一個萬用字元匹配HelloWorld,第二個萬用字元匹配create。因此,由cn.javass.action.action.HelloWorldAction的create方法來響應。

  2)那麼,對於<result>元素,能不能也使用<action>元素的name屬性定義的萬用字元呢?答案是可以的,假如有如下的配置:

<action name="*_*_*_*" class="cn.javass.action.action.{1}Action" method="{2}">  
     <result name="{3}">/${folder}/{4}.jsp</result>  
</action>  

  3)在使用萬用字元的時候,也有可能不止一個使用萬用字元的<action>元素可能匹配這次URL的訪問

,看以下的配置檔案:

<action name="HelloWorld_create" class="cn.javass.action.action.HelloWorldAction" method="create2">  
      <result name="toWelcome">/s2impl/welcome.jsp</result>  
</action>  
<action name="*_*" class="cn.javass.action.action.{1}Action" method="{2}">  
      <result name="toWelcome">/s2impl/welcome.jsp</result>  
</action>  

  這時候,如果訪問“/helloworld/HelloWorld_create.action”,Struts2首先會查詢是否有精確匹配的<action>元素,這時候無論以上<action>元素以什麼順序出現,Struts2肯定會先找到並使用精確匹配的<action>元素。但是,如果沒有精確匹配的<action>元素,則Struts2會找到第一個匹配的使用萬用字元的<action>元素來使用。

  萬用字元對於那些簡單的CRUD的工程或軟體原型來說,只要Action的包名、Action的類名、對應的方法名寫的有規律的應用,能大大簡化配置的工作。