1. 程式人生 > >struts2之action

struts2之action

動態調用 nbsp 文件 Coding quest 想要 public 完成 ram

struts2在配置web.xml時,會指定filter攔截路徑,如*.action。當瀏覽器請求一個action時,默認調用的是該action中的execute()方法。想要調用其他方法,需要為action指定method屬性。

例如以下的struts.xml的配置

<struts>
     <package name="musicManager" namespace="/" extends="struts-default">
          <action name="queryMusic" class="com.pxy.struts.action.MusicManagerAction"
method="queryMusic"> <result name="queryMusic">/musicList.jsp</result> </action> </package> </struts>

當一個action中有多個方法需要被調用時,struts.xml文件中的action配置將顯得非常臃腫,為解決這一問題,Struts2提供了動態方法調用

形如:

<form action="DemoAction!methodName.action">

DemoAction 為struts.xml文件中<action name="">中的值,methodName為action中需要調用的方法。中間用!隔開

相應的struts.xml配置將需要增加動態調用常量,根據配置的<result>信息定向跳轉路徑。

<!--定義常量,以下信息表示Struts2允許動態方法調用-->
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
 <!--MusicmanagerAction配置信息-->
 <action name="musicManager" class="com.pxy.struts.action.MusicManagerAction">
      <
result name="queryMusic">/musicList.jsp</result>    <result name="deleteMusic">/musicList.jsp</result> </action>

另一種動態調用:通配符

struts.xml中,<action> 中的name屬性支持通配符,表達一個action定義多個邏輯action

相關的struts.xml配置如下:

<action name="userManager_*" class="包名.UserManagerAction" method="{1}">
       <result name="{1}">{1}.jsp</result>
</action>

訪問路徑:

http://localhost/struts2/userManager_update.action

userManager_update.action,指定了*中的內容為update,通過{1}表示*中的第一個內容,定向到update.jsp頁面

Struts2之管理結果集

dispatcher 結果集、redirectAction 結果集

最典型的<result> 配置如下:

<!--為success的邏輯視圖配置result,type屬性指定結果類型-->
<result name=“success” type=“dispatcher”>
<!--指定該邏輯視圖對應的實際的視圖資源-->
     <param name=“location”>/index.jsp</param>
     <param name=“parse”>true</param>
</result>

其中,location屬性指定了該邏輯對應的實際視圖資源

parse屬性指定了是否允許在實際視圖中使用ognl表達式,默認為true。

該配置的簡化形式如下:

<action name=“login”  class=“com.pxy.struts.action.LoginAction”>
     <!--為success的邏輯視圖配置result,type屬性指定結果類型-->
     <result name=“success”type=“dispatcher”>/main.jsp </result>
</action>

其中,結果類型也可以省略,<result>name屬性默認為success,type屬性默認為dispatcher

dispatcher結果類型:

實際會轉換為如下的代碼

RequestDispatcher rd=request.getRequestDispatcher("index.jsp");
rd.forward(request,response);

redirectAction結果類型:

當一個Action處理完成後,需要讓另一個Action進行下一步處理,這時就可以使用redirectAction結果類型。

形式如下

<action name="musicManager" class="包名稱.MusicManagerAction">            
       <result  name="queryMusic">/musicList.jsp</result>
       <result  name="addMusic" type="redirectAction">  
             <param name="actionName">musicManager</param>  
             <param name="method">queryMusic</param>  
       </result>  
</action>

當執行addMusic後,需要讓歌曲信息重新顯示在頁面上,這裏就需要重定向到musicManager這個action,執行裏面的queryMusic方法

在Action中訪問Servlet API

Struts2提供了一個ServletActionContext類訪問Servlet API。

public String showServletApi(){
       HttpServletRequest request= ServletActionContext.getRequest();  //獲取request
       request.setAttribute("requestKey", "requestValue");
       HttpSession  session=request.getSession();  //獲取session
       session.setAttribute("sessionKey", "sessionValue");
       ServletContext context=ServletActionContext.getServletContext();  //獲取context
       context.setAttribute("servletContextKey", "servletContextValue");
       HttpServletResponse response=ServletActionContext.getResponse();  //獲取response
       request.setAttribute("encoding", response.getCharacterEncoding());
       return "success";  
}

struts2之action