动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多
struts提供了三中方法解决
1、指定Action属性
2、感叹号方式
3、通配符方式
主要讲一下通配符方式的个人理解
一、HelloWorldAction.java
package com.imooc.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport {
public String add() {
return "add";
}
public String update() {
return "update";
}
@Override
public String execute() throws Exception {
System.out.println("执行Action");
return SUCCESS;
}
}
二、struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="helloworld_*" method="{1}" class="com.imooc.action.HelloWorldAction">
<result>/result.jsp</result>
<result name="add">/{1}.jsp</result>
<result name="update">/{1}.jsp</result>
</action>
</package>
</struts>
三、机制理解
访问地址http://localhost:8888/HelloWorld/HelloWorld_update.action
name中的通配符*即代表update的值,也是{1}的值
通过传过来的参数表明method方法是class类中的update方法
在执行HelloWorldAction类中的update方法中,传出String的值为update代表result标签中的name属性,即知道用哪一个result方法返回update.jsp
四、问题探究
1、namespace的多值通配
<action name="*_*" method="{2}" class="com.imooc.action.{1}Action">
<result>/result.jsp</result>
<result name="add">/{2}.jsp</result>
<result name="update">/{2}.jsp</result>
</action>
name=“_”前一个用{1}表示,后一个用{2}表示,以此类推
2、project->clean
及时清除Eclipse缓存,不然会影响结果