struts2之动态方法调用

当我们访问一个Action时,默认是访问execute()方法,但当在一个Action中存存多个方法时,这时我们应该怎么定位到想要访问的方法呢?这时就需要用到动态方法调用DMI(Dynamic Method Invocation)。这里简单介绍两种动态调用的方法:

一、method属性

二、通配符

 

一、method属性

在struts.xml文件中,我们可以指定method属性,来定位我们要访问的方法,如下代码:

下面通过一个登录注册的demo来演示一下具体的操作过程:

一)、LoginRegisterAction 源文件部分代码如下: 

	private String userName;
	private String password;
	
	//默认执行登录功能
	public String execute() {
		if ("admin".equals(userName) && "123".equals(password)) {
			ActionContext context = ActionContext.getContext();
			context.getSession().put("tip", "恭喜你" + userName + "你已经登成功");
			return SUCCESS;
		} else {
			return ERROR;
		}
	}

	public String register() {
		ActionContext context = ActionContext.getContext();
		context.getSession().put("tip", "恭喜你" + userName + "你已经注册成功");
		return SUCCESS;
	}
}

 

二)、struts.xml 文件部分配置如下:

		
		
			/dmi/login.jsp
			/dmi/error.jsp
			/dmi/welcome.jsp
		
		
			/dmi/login.jsp
			/dmi/error.jsp
			/dmi/welcome.jsp
		

以上struts.xml文件配置中,dmi-login默认对应Action中的execute()方法,dmi-register由于加了method="register"属性,则对应Action中的register()方法。

 

三)、loginRegister.jsp文件代码如下:


	
		struts2之动态方法调用
		
		
	
	
		

动态方法调用之method属性

用户名: 密 码:

在一个form表单中,有登录、注册两个动作,分别对应Action中的不同方法,登录 默认对应execute()方法,注册对应register()方法,这样,通过method属性实现动态方法调用的操作就完了,但是struts.xml文件中的配置存存冗余问题,这时我们可以通过通配符来解决这个问题。

 

二、通配符

一)、为了更好的说明问题,我们在LoginRegisterAction 源文件中增加以下两个方法,方法实现功能与上面的完成一样,主要用于体现 登录 不在调用默认的 execute() 方法,而是对应于Action中的 dmiLogin() 方法,注册 对应Action中的 dmiRegister() 方法:

public String dmiRegister() {
	ActionContext context = ActionContext.getContext();
	context.getSession().put("tip", "恭喜你" + userName + "你已经注册成功");
	return SUCCESS;
}
	
public String dmiLogin(){
	if ("admin".equals(userName) && "123".equals(password)) {
		ActionContext context = ActionContext.getContext();
		context.getSession().put("tip", "恭喜你" + userName + "你已经登成功");
		return SUCCESS;
	} else {
		return ERROR;
	}
}

二)、struts.xml 文件部分配置如下:

		
		
			/dmi/login.jsp
			/dmi/error.jsp
			/dmi/welcome.jsp
			

上面的不是一个普通的Action,而是一个定义了一系列的逻辑Action,只要用户请求的URL是*Action模式的,都可能用该Action来处理;method属性值不再是Action中的哪一个方法,而是一个表达式,该表达式的值是name属性中的第一个*的值。例如用户请求的URL是:dmiLoginAction.action,则调用LoginRegisterAction中的dmiLogin方法。

三)、loginRegister.jsp文件增加如下代码:

$("#register").click(function(){
	var node=$("#myForm");
	node.attr("action","dmiRegisterAction.action");
});

 

动态方法调用之通配符

用户名: 密 码:

 

 到此,struts2的动态方法调用就介绍完了,希望对Java爱好者有所帮助,如果有写得不好或有错误之处,还请帮忙指正,谢谢

 

 

 

 

 

你可能感兴趣的:(Java技术文档)