有时在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 >
< 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;
public class 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代码
}
}
import org.apache.struts.actions.LookupDispatchAction;
public class 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
中由提交按钮生成的请求参数名。