名词解释:
LookupDispatchAction继承DispatchAction, 用于对同一个页面上的多个submit按钮进行不同的响应。其原理是,首先用MessageResource
将按钮的文本和ResKey相关联,例如button.save=保存;然后再复写getKeyMethodMap(), 将ResKey和MethodName对应起来, 例如map.put
("button.save", "save"); 其配置方法和DispatchAction是一样的,一下是详细使用说明.
我们今天要讲的是LookupDispatchAction的例子。本例目的是第一个页面test.jsp上有一个表单,这个表单中有个submit。分别点击不同
的submit会跳转到两个不同的页面one.jsp,two.jsp。我的开发工具是Eclipse3.2.1,MyEclipse5.1,导入struts1.2。好了,我们现在开始。
步骤:
一.新建一个WEB工程,我取名为:lookupdispatchactiontest。
二.导入struts1.2,并在Base package for new classes:中修改报名,我改为:org.nanfeng.struts
三.在struts-config.xml总添加一套三合一(jsp,action,form)。并在Use case:中起名字,我起为:test。然后Create JSP form,并
将/test.jsp前面的/form去掉。下一步
四.在Superclass:总选中:org.apache.struts.actions.LookupDispatchAction。完成。
五.再新建两个JSP页面,分别取名为one.jsp,two.jsp。
六.在testForm与one.jsp,two.jsp页面之间分别创建forward,取名为toone,totwo。
七.给struts-config.xml的testAction中添加一个新属性:parameter="action"。
八.修改test.jsp中<body>标记中的内容为:
<html:form action="/test" method="post">
<html:submit property="action">
<bean:message key="toone"/>
</html:submit><br>
<html:submit property="action">
<bean:message key="totwo"/>
</html:submit>
</html:form>
九.修改testAction中的内容为:
public ActionForward one(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
TestForm testForm = (TestForm) form;
return mapping.findForward("toone");
}
public ActionForward two(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
TestForm testForm = (TestForm) form;
return mapping.findForward("totwo");
}
@Override
protected Map getKeyMethodMap() {
Map map = new HashMap();
map.put("toone", "one");
map.put("totwo", "two");
return map;
}
十.修改ApplicationResources.properties中的内容为:
toone:one
totwo:two
十一.完成,部署到Tomcat中运行看看吧!!最好再修改一下one.jsp和two.jsp这两个页面,容易看效果。
注:
下面给大家解释一下上面的代码:
第八步.submit后面的property中的属性值action就是struts-config.xml中testAction里新添加的属性parameter的值,这里它相当于一个
参数名。message后面的key的值toone,totwo,表示的就是对于action的参数值。它的作用是在testAction中的getKeyMethodMap()方法中找到
对应的方法名,也就是本例中的one()和two()。另外一定不能忘记的是在getKeyMethodMap()中将页面传过来的参数和方法名关联之后必须还要
在ApplicationResources.properties中也将它们关联起来。
第九步.one()和two()这两个方法就是原来action中的excute()方法,这里就避免如在excute()方法中做无休止的判断了。
protected Map getKeyMethodMap()方法就是将test.jsp中传过来的参数与上面两个方法名关联起来。