有時在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;
……
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中由提交按鈕生成的請求參數名。