有时在HTML form中需要提供多个提交按钮这时LookupDispatchAction类就派上用场了LookupDispatchAction是DispatchAction的子类用于处理客户端代码中有一个Form含有多个提交按钮的情况为了使用LookupDispatchAction首先来编写客户端代码代码如下
<html:formaction=myaction>
<html:submitproperty=action>
<bean:messagekey=submitprint/>
</html:submit>
<html:submitproperty=action>
<bean:messagekey=submitsave/>
</html:submit>
</html:form>
其中submitprint和submitsave是属性文件中的keyaction实际上是提交按钮的name属性值在提交时会将property和<beanmessage key=…… />作为请求参数和参数值传给Struts动作如save按钮被单击时请求//localhost/……/myactiondo?action=save其中save为submitsave在属性文件中对应的属性值也就是说submitsave = save
接下来我们编写一个LookupDispatchAction的子类代码如下
packageaction;
importorgapachestrutsactionsLookupDispatchAction;
publicclassMyLookupDispatchActionextendsLookupDispatchAction
{
//为了方便描述在这里未使用属性文件只是直接将key和value的映射添加到Map对象中
//读者可以在getKeyMethodMap方法中从属性文件中读取相应的keyvalue对
//来添加到Map对象中
protectedMapgetKeyMethodMap()
{
Mapm=newHashMap();
mput(submitprintprint);
mput(submitsavesave);
returnm;
}
publicActionForwardprint(ActionMappingmappingActionFormform
HttpServletRequestrequestHttpServletResponseresponse)
{
//处理print代码
}
publicActionForwardsave(ActionMappingmappingActionFormform
HttpServletRequestrequestHttpServletResponseresponse)
{
//处理save代码
}
}
在编写LookupDispatchAction的子类时要注意必须实现getKeyMethodMap方法在这个方法中需要进行key和Action方法的映射下面的代码用来配置MyLookupDispatchAction
<actionpath=/moresubmittype=actionMyLookupDispatchActionparameter=action/>
其中parameter属性指定了请求URL中由提交按钮生成的请求参数名