Struts2中的action

二、Struts2中的actionhtml

    Struts2中的Action是一個純Java對象,默認的Action會執行execute()方法。java

    2.一、訪問不一樣的方法瀏覽器

        一、能夠爲Action設置多個method,以後在struts.xml文件中配置這些Action所對應的方法。jsp

<!-- 能夠爲一個action寫多個方法進行對應,這樣能夠減小action類的數量,
				可是沒法減小配置的數量 -->
		<action name="user_addInput" class="org.struts.action.UserAction" method="addInput">
			<result name="success">/WEB-INF/user/addInput.jsp</result>
		</action>
		<action name="user_add" class="org.struts.action.UserAction" method="add">
			<result name="success">/WEB-INF/user/add.jsp</result>
		</action>
		<action name="user_list" class="org.struts.action.UserAction" method="list">
			<result name="success">/WEB-INF/user/list.jsp</result>
		</action> 
        <!-- 建立了多個action,而且爲action中的每個方法都設置一個對應
             致使的問題就是:action要配置的數量太多,不方便操做 -->

        二、只是寫一個action,經過一些特殊的方法來進行訪問。this

<!-- 如下方式能夠僅僅寫一個action,以後經過在調用的時候肯定方法,
             經過在調用時user!addInput.action來完成某個特定方法的調用。 
			這個方法雖然減小了action的配置,可是依然得增長大量的結果集進行配置 -->
		<action name="user" class="org.struts.action.UserAction">
            <!-- 默認的result的name就是success,
                 下面每個方法都有不一樣的返回字符串 -->
			<result name="add">/WEB-INF/User/add.jsp</result>
			<result name="addInput">/WEB-INF/User/addInput.jsp</result>
			<result name="list">/WEB-INF/User/list.jsp</result>
		</action>
        <!-- 若是但願調用不一樣的方法,須要按照以下寫法書寫:
             user!add.action:表示會調用user這個action中的add方法
             user.action?method:list:表示會調用user這個action中的list方法 -->

        以上操做的問題是:須要爲不一樣的方法設定不一樣的返回值,這個名稱很差統一。spa

        特別注意:使用以上配置方法,必須設置如下值:code

<struts>
	<!-- 動態調用方法必須設置下面的值 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true" />

        三、使用通配符的方式xml

<!-- 基於通配符的方式:這樣只要約定好規則能夠大大減小action的編寫 -->
		<!-- name="*_*":當在瀏覽器中輸入User_addInput.action時,User就會去對應第一個*,
			addInput會去對應第二個*。
			{1}:表示第一個*所對應的名稱,若是是User_add表示訪問的action是UserAction。
			{2}:表示第二個*所對應的名稱,若是是User_add表示會訪問UserAction中的add方法 -->
		<action name="*_*" class="org.struts.action.{1}Action" method="{2}">
			<!-- 只要方法返回的是success就會去/WEB-INF/下找相應的jsp文件,若是是
				User_add.action表示會去找/WEB-INF/User/add.jsp文件 -->
			<result>/WEB-INF/{1}/{2}.jsp</result>
			<!-- 設置客戶端跳轉,方法返回的名稱爲name="r_list" -->
			<result type="redirect" name="r_list">/{1}_list</result>
		</action>

    在開發中通常都使用通配符的方式(這樣能夠大大減小action的配置)。htm

    2.二、一些常量的配置對象

    能夠經過<constant>標籤來設置一些常量的配置,這些常量能夠經過struts的jar包來查詢。

<!-- 動態調用方法必須設置 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true" />
	<!-- 設置擴展名 -->
	<constant name="struts.action.extension" value="action,do,html"/>
	<!-- 設置修改了配置文件後不用從新啓動直接生效 -->
	<constant name="struts.configuration.xml.reload" value="true"/>

    2.三、全局結果集

<package name="default" namespace="/" extends="struts-default">
    	<!-- 全部的action只要返回了error,若是在action內部沒有設置的話就會找到這個
    		全局結果集所對應的頁面 -->
    	<global-results>
    		<result name="error">/WEB-INF/inc/error.jsp</result>
    	</global-results>

    2.四、參數的傳遞

        一、對於servlet而言傳遞參數是經過request或Session等servlet做用域進行傳遞的。

        二、對於Struts2而言,傳遞參數很是簡單。

        方式一:

public class UserAction {
	/**
	 * 直接在action中設定兩個屬性,以後爲屬性提供get和set方法(struts是經過get和set來取值的)。
	 * 以後直接在頁面經過EL表達式(${})或者<s:property value="xxx"/>標籤便可以獲得值
	 */
	private String username;
	private String password;
	
	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

    方式二:能夠經過ActionContext來設置值。取值時:若是使用EL表達式直接取值便可,若是使用
                <s:property value="#aaa"/>建議在值前增長#。

public String list() {
		//傳值的第一種方式,直接經過在action中設置相應的get和set方法
		this.setUsername("張三");
		this.setPassword("123");
		//第二種方式經過ActionContext完成值的傳遞
		ActionContext.getContext().put("aaa", 12345);
		ActionContext.getContext().put("bbb", 67890);
		ActionContext.getContext().put("ccc", "abc");
		//第三種傳值方式,能夠直接經過Servlet的API傳值
		ServletActionContext.getRequest().setAttribute("hello", "world");
		return "success";
	}

    方式三:使用Servlet API(通常不推薦使用)

//第三種傳值方式,能夠直接經過Servlet的API傳值
		//使用Servlet API來設置值,取值:EL表達式,<s:property value="#request.hello"/>
		ServletActionContext.getRequest().setAttribute("hello", "world");
		return "success";

    三、在action中接收參數:只要定義相應的屬性而且設置相應的get和set方法,會自動完成傳值。

http://localhost:8080/struts01/User_addInput.action?username=abc&password=123
相關文章
相關標籤/搜索