EventDispatchAction(Struts 1.2.9+ 引入)同樣繼承 DispatchAction,專為單一表單包含多個提交按鈕設計。優於 LookupDispatchAction:無需屬性檔、無需實作 getKeyMethodMap(),直接以按鈕 property 屬性值決定呼叫方法。
package action;
import org.apache.struts.actions.EventDispatchAction;
import javax.servlet.http.*;
import org.apache.struts.action.*;
public class MyEventDispatchAction extends EventDispatchAction {
// 對應 property="print"
public ActionForward print(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
try {
response.setCharacterEncoding("GBK");
response.getWriter().println("列印成功!");
} catch (Exception e) {}
return null;
}
// 對應 property="save"
public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
try {
response.setCharacterEncoding("GBK");
response.getWriter().println("儲存成功!");
} catch (Exception e) {}
return null;
}
}
<action name="firstValidatorForm"
path="/event"
type="action.MyEventDispatchAction"
validate="false"
parameter="print,save" />
parameter="print,save":以逗號分隔列出所有支援的按鈕 property 值。property 自動導向同名方法。<%@ taglib uri="https://struts.apache.org/tags-html" prefix="html" %>
<html:form action="event">
姓名:<html:text property="name" /><br>
<html:submit property="print" value="列印" />
<html:submit property="save" value="儲存" />
</html:form>
關鍵:按鈕 property 值(print、save)必須與 parameter 列表完全一致。
HTML 規格中,<input type="image"> 或某些瀏覽器提交時會送出 name.x、name.y 座標。Struts 允許按鈕寫為 property="print.x",而 parameter 仍填 print,save,框架會自動忽略 .x 後綴進行匹配。
啟動 Tomcat,訪問 https://localhost:8080/samples/moreSubmit.jsp,點擊「列印」顯示「列印成功!」,點擊「儲存」顯示「儲存成功!」。
EventDispatchAction 以「按鈕 property 對應方法名」的直覺約定,大幅簡化多提交按鈕處理,是現代 Struts 1.x 專案的首選方案。