您的位置:首页 > 编程语言 > Java开发

struts2动态方法调用 ActionName!methodName.action

2010-06-17 16:19 585 查看
Struts1框架提供了DispatchAction,从而允许一个Action内包含多个处理逻辑。例如对于同一个表单,当用户通过不同的请求按钮提交表单时,应该使用Action的不同方法来处理请求。

Struts2同样提供了这种处理多个请求的Action,看下面的JSP页面。

上面的JSP页面包含两个提交按钮,但两个提交按钮分别提交给Action的不同方法处理,其中“登陆”按钮希望使用登陆逻辑来处理请求,而“注册”按钮则希望使用注册逻辑来处理请求。

此时,可以采用DMI(Dynamic Method
Invocation,动态方法)调用来处理这种请求,动态方法调用是指表单元素的action并不是直接等于某个Action的名字,而是以如下形式来指定Form的action属性:

<!-- action属性为actionName!methodName的形式 -->


action="ActionName!methodName.action"


于上面JSP页面的“注册”按钮的代码如下:

<!-- “注册”按钮是一个没有任何动作的按钮,但单击该按钮时触发regist函数
-->

<input type="button" value="注册" onClick="regist();"/>

单击“注册”按钮时将触发regist函数,该函数的代码如下:

function regist()

{

//获取JSP页面中的一个表单元素

targetForm = document.forms[0];

//动态修改目标表单的action属性

targetForm.action =
"Login!regist.action";


//提交表单

targetForm.submit();

}

上面JavaScript代码的核心在于动态修改表单元素的action属性,修改后action属性为:Login!regist.action,其实质就是将该表单提交给login
Action的regist方法处理。

login Action类的代码如下:

public class LoginRegistAction
extends ActionSupport

{

//封装用户请求参数的两个属性

private String username;

private String password;

//封装处理结果的tip属性

private String tip;

//username属性对应的setter和getter方法

public String getUsername()

{

return username;

}

public void setUsername(String
username)

{

this.username = username;

}

//password属性对应的getter和setter方法

public String getPassword()

{

return password;

}

public void setPassword(String
password)

{

this.password = password;

}

//tip属性对应的setter和getter方法

public String getTip()

{


return tip;

}

public void setTip(String tip)

{


this.tip = tip;

}

//Action包含的注册逻辑

public String regist()
throws Exception

{

ActionContext.getContext().getSession().put("user" , getUsername());

setTip("恭喜您," + getUsername() + ",您已经注册成功!");

return SUCCESS;

}

//Action包含的默认处理逻辑

public String execute() throws Exception

{

if (getUsername().equals("scott")

&&
getPassword().equals("tiger") )

{

ActionContext.getContext().getSession().put("user" , getUsername());

setTip("欢迎," + getUsername() + ",您已经登陆成功!");

return SUCCESS;

}

else

{

return ERROR;

}


}

}

图4.1所示的JSP页面中的“登陆”按钮就是一个普通按钮,没有任何特殊之处,当浏览者单击“登陆”按钮时,系统将提交给对应Action的默认方法处理。当浏览者单击“注册”按钮时,系统将提交给login
Action的regist方法处理。因此,如果单击“注册”按钮,将看到如图4.2所示的页面。

通过这种方式,我们可以在一个Action中包含多个处理逻辑,并可以通过为表单元素指定不同action属性来提交给Action的不同方法。

对于使用动态方法调用的方法,例如regist方法,该方法的方法声明与系统默认的execute方法的方法声明,只有方法名不同,其他方法参数,返回值类型都应该绝对相同。

注意:使用动态方法调用必须设置Struts2允许动态方法调用。开启系统的动态方法调用是通过设置struts.enable.DynamicMethodInvocation常量完成的,设置该常量的值为true,将开启动态方法调用;否则将关闭关闭动态方法调用。

struts.enable.DynamicMethodInvocation=true
//设置为启用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐