struts2學習記錄其二:Action的配置和返回結果的配置


大家好,我們今天繼續學習Struts2。如果對Struts2的創建有問題的朋友請看上一章。

上一章:http://www.cnblogs.com/suxi-blog/articles/6036021.html

下一章:異常處理的配置:http://www.cnblogs.com/suxi-blog/articles/6269880.html 

一.配置Action

1.包和命名空間

<package....../>必須指定name(報名)屬性,其他的可選屬性:extends(繼承),namespace(空間名,這個需要注意。),abstract(指定為抽象包)

(實際上所有的Struts2插件文件都會提供一個struts-plugin.xml)

默認的空間名(不使用namespace屬性):可以處理任何空間里的Action請求,前提是他在自己的命名空間里沒有該Action。

根命名空間(namespace="/"):指出里根下的Action請求,如請求/login.action。

2.Action的基本配置

至少指定一個name(通常是用字母和數字組成)屬性作為請求的URL。但通常還需指定class屬性作為Action的實現類,以及邏輯視圖和物理視圖的對應關系<result...../>。

(如果設置struts.enable.SlashesInActionNames常量為true,則可以使用其他字符來作為name)

3.使用Action的動態方法調用(盡量少使用)

action="actionName!methodName"

(注意:這個方法不需到xml文件中配置,只需要把struts.enable.DynamicMethodInvocation設置為true,它是直接調用對應Action的方法,而此方法必須和execute方法一樣的格式)

4.指定method屬性及使用通配符

在Action中加入method屬性調用class處理類的方法

通配符寫在name屬性中,然后在class、method、<result..../>中使用{N}的形式來配備,可以指定method方法,如果不指定使用execute()方法(在這里name最好寫成*.action)

特殊:不做任何處理的直接調轉到其他界面(一般寫在struts.xml的最后,實現簡單的超鏈接。)

<action name="*">

<result>{1}.jsp</result>

</action>

6.配置默認Action

<defualt-action-ref name="....."/>:只是指定默認的處理Action,下面還是要配置其Action。

7.配置Action的默認處理類

<defualt-class-ref class="......."/>

二.配置處理結果

1.struts2提供兩種結果:

局部結果:將<result.../>作為<action.../>的子元素

全局變量:將<result.../>作為<global-results..../>的子元素

(<result.../>常用屬性name、type)

 <package name="loginpackage" namespace="/user" extends="struts-default">
        <action name="login" class="com.login.LoginAction1">
          <result name="success" type="dispatcher">//type還可以指定為location、parse,默認為disoatcher

      <param name="location">succees.jsp</param>

    //這里的name可以指定兩個值:location指定該邏輯視圖對應的實際的視圖資源,parse可以使用OGNL表達式來作為實際視圖名字,兩個屬性都可不要,默認success                    

    </result>         
        </action>
    </package>

2.struts2支持的結果類型

這里我們先只介紹三個類型,其他的在后面的會詳細介紹的

1.plainText(不常用):只要用來顯示實際資源的代碼。

參數:location:指定實際的視圖資源。charSet:指定輸出界面時的所用到的字符集。一般放在<param.../>中。

2.redirect:將請求重定向到指定的視圖資源。(dispatcher是將請求轉發給視圖資源)

注意:重定向會丟失所有的請求參數、請求屬性、Action的處理結果。不能重定向到WEB-INF路徑下,因為該路徑是被保護的。

參數:location:跳轉地址,parse:是否允許使用表達式

3.redirectAction:功能與redirect一樣,重定向。但這個可以使用ActionMapper

參數:actionName:重定向的Action名,namespace:重定向的Action所占的空間(針對與Action,二redirect針對於具體的資源請求)

 

3.動態結果:OGNL表達式與通配符連用(借鑒前面的特殊Action)

4.Action屬性值決定物理視圖(這個我也不太懂,有大牛懂得給我說一下)

${屬性名.屬性名........}

5.全局結果(<global-results...../>)

其使用方式和<action.../>幾乎一樣,這個是覆蓋全部的Action,但會被局部的Action所覆蓋。

6.使用PreResultListener

PreResultListener攔截器是在action方法執行后,返回result(即回調before()方法)之前執行的攔截器。要通過ActionInvocation的addPreResultListener()方法完成。

它可以將Action轉入不同的Result,所以它可以作為日志實現方式。

ActionInvocation invocation = ActionContext.getContext().getActionInvocation();
 invocation.addPreResultListener(new PreResultListener()
  {
            public void beforeResult(ActionInvocation invacation, String resultCode)
             {
                            //方法體內寫我們需要處理的監聽器業務邏輯
                            //上面的形參 resultCode 是前台發送的請求(即 Action 的邏輯名)
                }
 });

 

對上面的某些內容的具體代碼:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC  "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

 <constant name="struts.enable.DynamicMethodInvocation" value="false" />  

 <constant name="struts.devMode" value="true" />  

<constant name="struts.custom.il8n.resources" value="mess"/>  

<constant name="struts.enale.DynamicMethodInvocation" value="false"/>   

 <package name="loginpackage" namespace="/user" extends="struts-default">       

 <action name="login" class="com.login.LoginAction">        

      <result name="error">/error.jsp</result>    

    <result name="success">/success.jsp</result>                   

 </action>    

</package>

 <package name="registpackage" namespace="/" extends="struts-default">   

    <action name="MyAction" class="com.login.MyAction">      

      <result>${target}.jsp</result>       

     </action>        

   <action name="*" class="com.login.RegistAction" method="{1}">          

  <result name="error">/error.jsp</result>    

  <result name="success">/success.jsp</result>           

  </action>    

</package>

<package name="Allpackage" extends="struts-default">   

  <action name="*">

  <result>{1}.jsp</result>

</action>

</package>

</struts>

------------------------------------------------------------------------------------------------------------------------------------

內容不是特別詳細,見諒。這只是我的一些見解。有什么錯誤的請指出,謝謝。

上一章:http://www.cnblogs.com/suxi-blog/articles/6036021.html

下一章:異常處理的配置:http://www.cnblogs.com/suxi-blog/articles/6269880.html 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM