Struts2中Action的方法访问

本文记录Java学习过程中遇到的Struts2中Action的方法访问~

在<action>的标签中有一个属性method,通过method的配置来指定Action中的某个方法执行。

方式一:通过配置method属性

示例代码(前端页面):

<h3>客户管理</h3>
<a href="${ pageContext.request.contextPath }/saveCustomerAction.action">添加客户</a><br/>
<a href="${ pageContext.request.contextPath }/updateCustomerAction.action">修改客户</a><br/>
<a href="${ pageContext.request.contextPath }/deleteCustomerAction.action">删除客户</a><br/>
<a href="${ pageContext.request.contextPath }/findCustomerAction.action">查询客户</a>

示例代码(后端Action):

public class CustomerAction extends ActionSupport {
	
	public String save() {
		System.out.println("save");
		reture NONE;
	}

	public String update() {
		System.out.println("update");
		reture NONE;
	}

	public String delete() {
		System.out.println("delete");
		return NONE;
	}

	public String find() {
		System.out.println("find");
		return NONE;
	}
}

示例代码(Action的配置):

<package name="demo" extends="struts-default" namespace="/">
	<action name="saveCustomerAction" class="ren.oliver.action.CustomerAction" method="save" />
	<action name="saveCustomerAction" class="ren.oliver.action.CustomerAction" method="update" />
	<action name="saveCustomerAction" class="ren.oliver.action.CustomerAction" method="delete" />
	<action name="saveCustomerAction" class="ren.oliver.action.CustomerAction" method="find" />
</package>

用这种方式实现,同一个Action类就被配置了很多次,只是修改了后面的method的值,比较繁琐。

方式二:通过通配符配置

示例代码(前端页面):

<h3>客户管理</h3>
<a href="${ pageContext.request.contextPath }/customerAction_save.action">添加客户</a><br/>
<a href="${ pageContext.request.contextPath }/customerAction_update.action">修改客户</a><br/>
<a href="${ pageContext.request.contextPath }/customerAction_delete.action">删除客户</a><br/>
<a href="${ pageContext.request.contextPath }/customerAction_find.action">查询客户</a>

示例代码(后端Action):

public class CustomerAction extends ActionSupport {
	
	public String save() {
		System.out.println("save");
		reture NONE;
	}

	public String update() {
		System.out.println("update");
		reture NONE;
	}

	public String delete() {
		System.out.println("delete");
		return NONE;
	}

	public String find() {
		System.out.println("find");
		return NONE;
	}
}

示例代码(Action的配置):

<action name="customerAction_*" class="ren.oliver.action.CustomerAction" method="{1}" />

在<action>的name属性中使用的*代表任何字符,method中的{1}代表name属性中的出现的第一个*所替代的字符。

方式三:动态方法访问

动态方法访问在Struts2中默认是不开启的,使用的话必须修改先开启一个常量。

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

示例代码(前端页面):

<h3>客户管理</h3>
<a href="${ pageContext.request.contextPath }/customerAction!save.action">添加客户</a><br/>
<a href="${ pageContext.request.contextPath }/customerAction!update.action">修改客户</a><br/>
<a href="${ pageContext.request.contextPath }/customerAction!delete.action">删除客户</a><br/>
<a href="${ pageContext.request.contextPath }/customerAction!find.action">查询客户</a>

示例代码(后端Action):

public class CustomerAction extends ActionSupport {
	
	public String save() {
		System.out.println("save");
		reture NONE;
	}

	public String update() {
		System.out.println("update");
		reture NONE;
	}

	public String delete() {
		System.out.println("delete");
		return NONE;
	}

	public String find() {
		System.out.println("find");
		return NONE;
	}
}

示例代码(Action的配置):

<action name="userAction" class="ren.oliver.action.CustomerAction" />

标签: none