LookupDispatchAction是DispatchAction的子类。他的作用是将多个响应用户请求的Action方法放置在同一个Action中。
LookupDispatchAction主要适合用于页面中同一个表单具有多个提交按钮,每个提交按钮要递交给不同的Action处理方法的情况。
LookupDispatchAction所执行的方法也是依据页面传递的参数来确定的。而具体执行哪个Action方法则是由用户提交参数的值、资源文件、定义的映射方法所共同决定的。
具体请参考下面的例题:
1、先在JSP页面中使用如下的提交按钮:
#test.jsp
<html:form action="/test">
<!--property属性的值一定与ActionMapping中的parameter属性的值相同-->
<html:submit property="method"><bean:message key="button.add"/></html:submit>
<html:submit property="method"><bean:message key="button.delete"/></html:submit>
</html:form>
2、在Struts的配置文件中设置paramerter属性:
#struts-config.xml
<!-- parameter属性指页面中按钮的名称,其中的name属性中的ActionForm随便建个就行我的是空的 -->
<action path="/test" type="action.TestLookUpDispatchAction" scope="request" input="test.jsp" parameter="method" ></action>
3、创建一个继承LookupDispatchAction的类,名叫TestLookUpDispatchAction放在action包下:
#TestLookUpDispatchAction.java
package action;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.LookupDispatchAction;
public class TestLookUpDispatchAction extends LookupDispatchAction {
@Override
protected Map getKeyMethodMap() {// 定义资源文件关键字与Action方法之间的映射关系
Map<String, String> map = new HashMap<String, String>();
map.put("button.add", "add");
map.put("button.delete", "delete");
return map;
}
// 自定义的方法
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
System.out.println("执行add方法成功");
return null;
}
// 自定义的方法
public ActionForward delete(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
System.out.println("执行delete方法成功");
return null;
}
}
4、在资源文件中为每个标记定义显示信息:
message.properties
button.add=add
button.delete=delete
这样就OK了,你可以试一下是否能调用到自己想要的方法。有什么问题可以联系我。