Struts2动态方法调用的方式...

在struts2中,当我们访问一个Action的时候,默认是是执行execute()方法,但是在实际需求中,我们需要做增删改查操作,那么有可能会出现过一个Action中有多个方法,我们应该如何来调用这些方法呢?这里一般有三种调用方式:

第一种调用方式:

在struts.xml中指定我们要访问的方法:

<struts>
    <package name="hellworld" extends="struts-default">
    	<action name="hobby" class="com.java1234.HobbyAction" method="add">
    		<result name="success">success.jsp</result>
    		<result name="error">error.jsp</result>
    	</action>
    	<action name="student" class="com.java1234.StudentAction" method="delete">
    		<result name="success">success.jsp</result>
    		<result name="error">error.jsp</result>
    	</action>
    </package>
</struts>
  在上面我们可以通过method属性来指定调用的方法,那么此时访问action的时候回根据method来指定调用的方法。

第二种调用方式:感叹号调用方式

public class LoginAction {
	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;
	}
	public String input() {
		return "success";
	}
	public String login() {
		if(username.equals("admin")) {
			ActionContext.getContext().getSession().put("isAdmin", true);
		}
		ActionContext.getContext().getSession().put("loginUser", username);
		ActionContext.getContext().put("url","/user_Article_add.action");
		return "redirect";
	}
	public String logout() {
		ActionContext.getContext().getSession().clear();
		ActionContext.getContext().put("url","/common_Login_input.action");
		return "redirect";
	}
}
第二种方式:前端访问的时候,我们需要在调用的Action后面+感叹号+方法名字,但是这种方式在实际开发中不推荐使用

这种方式我们首先得在sturts2.xml中配置一个常量:

<span style="white-space:pre">		</span><constant name="struts.enable.DynamicMethodInvocation" value="true" /> 

前端访问方式:<a href="basePath/项目名称/Action名称!方法名/>,如果没有配置后缀那么还要在方法名后面加上  .action,访问之后会根据return 的结果去匹配<result>标签的名字

第三种方式:通配符方式

这种方式我们第一不需要在web.xml中开启的DynamicMethodInvocation  

下面将举例来看看通配符是如何匹配的,在Action中:

public class PersonAction extends ActionSupport {

	public String add(){
		System.out.println("添加人员方法");
		return "add";
	}
	public String delete(){
		System.out.println("删除人员方法");
		return "delete";
	}
	public String update(){
		System.out.println("更新人员方法");
		return "update";
	}
}
PersonAction中我们有三个方法来处理请求,再看看struts2.xml

    	<action name="person_*" class="com.java1234.PersonAction" method="{1}">
    		<result name="add">add.jsp</result>
    		<result name="update">update.jsp</result>
    		<result name="delete">delete.jsp</result>
    	</action>
这里面有三个三个对应的返回结果,person_*表示,在请求中我们*代表任意方法,比如这样请求:

http://localhost:8080/StrutsDemo03/person_update调用的是update方法,返回的视图则是update.jsp

http://localhost:8080/StrutsDemo03/person_add调用的是add方法,返回的视图则是add.jsp

以此类推,但是需要注意的是我们的Action中一定有add  update方法与之匹配,其实我们还可以这样匹配

    	<action name="person_*" class="com.java1234.PersonAction" method="{1}">
    		<result name="test">{1}.jsp</result>
    	</action>
此时我们的WebContent下面的jsp名字一定要写成person_*,下划线里面的内容,这里分别是add.jsp   update.jsp   delete.jsp,其实{1}代表的*,在扩展中我们也可以用{2}代表第二个*

比如:person_*_studen_* 那么我们可以用{2}代表第二个*;

到此结束,在官方中推荐用第三种方式进行匹配,配置文件减少了许多。本文只是个人学习记录,如果有错的地方希望大家能够帮忙纠正,谢谢。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值