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
相关文章
相关标签/搜索