动态方法调用

每一个Action中都有一个execute方法,当我们调用相应的Action时,execute方法就会被默认执行。也就是说,每一个请求都对应一个Action,这样就会导致我们需要写很多个Action,即使它们是相关联的。为了减少Action的数量,减少重复编码,struts2提供了动态方法调用。将一组相关的业务放到同一个Action中,根据业务请求的不同而动态的调用相应的方法。

1、method方法:在一个Action中写入多个相关的方法,每一个方法都要在struts.xml中配置一个action,action中的method属性值指定调用Action的方法。execute为默认的调用方法,当配置的action中没有指定method属性时,调用execute方法。

index.jsp中的3个表单

<form action="LoginAction" method="post">
	<input type="submit" value="登陆" />
</form>
<form action="RegisterAction" method="post">
	<input type="submit" value="注册"/>
</form>
<form action="DefaultAction" method="post">
	<input type="submit" value="默认"/>
</form>

LoginAction.java

public class LoginAction extends ActionSupport{
	public String login() {
		System.out.println("login方法");
		return SUCCESS;
	}
	
	public String register() {
		System.out.println("register方法");
		return SUCCESS;
	}
	
	public String execute() throws Exception{
		System.out.println("默认调用的方法");
		return SUCCESS;
	}
}

struts.xml

<struts>
	<package name="xxx" extends="struts-default">
		<action name="LoginAction" method="login" class="com.demo.action.LoginAction">
			<result name="success">/page/loginSuccess.jsp</result>
		</action>
		<action name="RegisterAction" method="register" class="com.demo.action.LoginAction">
			<result name="success">/page/registerSuccess.jsp</result>
		</action>
		<action name="DefaultAction" class="com.demo.action.LoginAction">
			<result name="success">/page/error.jsp</result>
		</action>
	</package>
</struts>

2、感叹号方法:只配置一个action。通过在Action后加上 !方法名来调用同一个Action中的不同方法。感叹号方法要注意,2.5及以上版本需要在struts.xml文件中配置两条信息,同时,dtd约束需要是2.5版本

index.jsp

<form action="LoginAction!login" method="post">
	<input type="submit" value="登陆" />
</form>
<form action="LoginAction!register" method="post">
	<input type="submit" value="注册"/>
</form>
<form action="LoginAction" method="post">
	<input type="submit" value="默认"/>
</form>

LoginAction.java

public class LoginAction extends ActionSupport{
	public String login() throws Exception{
		System.out.println("login方法");
		return "login";
	}
	
	public String register() throws Exception{
		System.out.println("register方法");
		return "register";
	}
	
	public String execute() throws Exception{
		System.out.println("默认调用的方法");
		return "default";
	}
}

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
	<package name="xxx" extends="struts-default">
		<global-allowed-methods>regex:.*</global-allowed-methods>
		<action name="LoginAction" class="com.demo.action.LoginAction">
			<result name="login">/page/loginSuccess.jsp</result>
			<result name="register">/page/registerSuccess.jsp</result>
			<result name="default">/page/error.jsp</result>
		</action>
	</package>
	<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
</struts>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值