Struts1.x系列教程(19):LookupDispatchAction类处理一个form多个submit

有时在HTML form中需要提供多个提交按钮,这时LookupDispatchAction类就派上用场了。LookupDispatchAction是DispatchAction的子类,用于处理客户端代码中有一个Form含有多个提交按钮的情况。为了使用LookupDispatchAction,首先来编写客户端代码,代码如下:

<html:form action="myaction">
<html:submit property="action">
<bean:message key="submit.print"/>
</html:submit>
<html:submit property="action">
<bean:message key="submit.save"/>
</html:submit>
</html:form>

其中submit.print和submit.save是属性文件中的key。action实际上是提交按钮的name属性值。在提交时,会将property和<bean:message key="..." />作为请求参数和参数值传给Struts动作。如save按钮被单击时,请求URL为http://localhost:8080/.../myaction.do?action=save。其中save为submit.save在属性文件中对应的属性值,也就是说submit.save = save。

接下来我们编写一个LookupDispatchAction的子类,代码如下:

package action;
import org.apache.struts.actions.LookupDispatchAction;
publicclass MyLookupDispatchAction extends LookupDispatchAction
{
//  为了方便描述,在这里未使用属性文件,只是直接将key和value的映射添加到Map对象中
//  读者可以在getKeyMethodMap方法中从属性文件中读取相应的key-value对
//  来添加到Map对象中
protected Map getKeyMethodMap()
{
Map m = new HashMap();
m.put("submit.print", "print");
m.put("submit.save", "save");
return m;
}
public ActionForward print (ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
{
// 处理print代码
}
public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
{
// 处理save代码
}
}

在编写LookupDispatchAction的子类时要注意必须实现getKeyMethodMap方法,在这个方法中需要进行key和Action方法的映射。下面的代码用来配置MyLookupDispatchAction。

<action path="/moresubmit" type="action.MyLookupDispatchAction" parameter="action"/>

其中parameter属性指定了请求URL中由提交按钮生成的请求参数名。

 

你可能感兴趣的:(Web,struts1)