在Struts2中动态方法调用有两种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多。
一、感叹号方式(需要开启)
官网不推荐使用这种方式,建议大家不要使用。
用这种方式需要先开启一个开关,在Struts配置文件中配置
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
将此常量设置为true,这种方式才能使用,使用见示例Action
<package name="employee" namespace="/test/employee" extends="struts-default">
<action name="hello" class="com.siuloonglee.action.HelloWorld"
method="execute">
<result name="success">/WEB-INF/page/hello.jsp</result>
</action>
</package>
在HelloWorld中
public class HelloWorld {
private String msg;
public String getMessage() {
return msg;
}
public String execute() {
msg = "Hello,Struts2!\n我的第一个struts2应用";
return "success";
}
public String other() {
msg = "Hello,Struts2!\n我是other应用";
return "success";
}
}
在hello.jsp中使用${message}来获取msg的值。结果如下
1.调用默认的execute方法,地址栏输入
http://localhost:8080/TestStruts/test/employee/hello.action
结果:
2.调用other方法,在action后面加上!other
http://localhost:8080/TestStruts/test/employee/hello!other.action
结果:
二、通配符方式(官网推荐使用)
首先得关闭开关,或者在Struts配置文件中配置,因为Struts2默认是将其关闭的,所以也可不配置。
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
示例Action
<package name="employee" namespace="/test/employee" extends="struts-default">
<!-- 采用通配符定义action -->
<action name="crud_*" class="com.siuloonglee.action.CRUD"
method="{1}">
<result name="success">/WEB-INF/page/crud.jsp</result>
</action>
</package>
说明:*代表通配符,crud_*表示命名空间/test/employee下的所有以crud_开头的action,如crud_save,
crud_delete,
crud_update,crud_query。{1}中的1代表第一个通配符*代表的方法(这里就一个通配符,也可以使用多个通配符)如上面的save方法,delete等方法。
在CRUD中这样写道
public class CRUD {
private String crud;
public String execute(){
crud = "execute方法";
return "success";
}
public String save(){
crud = "save方法";
return "success";
}
public String delete(){
crud = "delete方法";
return "success";
}
public String update(){
crud = "update方法";
return "success";
}
public String query(){
crud = "query方法";
return "success";
}
public String getCrud() {
return crud;
}
}
在crud.jsp中使用${crud}来取得crud的值。结果如下
1.调用默认的execute方法,地址栏输入
http://localhost:8080/TestStruts/test/employee/crud_.action
结果:
2.调用默认的save方法,地址栏输入
http://localhost:8080/TestStruts/test/employee/crud_save.action
结果:
http://localhost:8080/TestStruts/test/employee/crud_delete.action
结果:
至此,本文结束!