DispatchAction
アクションを分離する
ひとつのForm内に複数のsubmitボタンがあり、それぞれ異なるアクションを実行したい場合に、DispatchActionを利用することで、JavaScriptによるSubmitの制御や、if文による実行ロジックの判定などを排除することができる。
実装
submitボタンにproperty句を指定し、任意の名称を設定する。
struts-config.xmlには parameter="[リクエストパラメータ名]"を設定する。
DispatchActionを継承したアクションクラスを作成し、html:submitボタンのvalue句に指定した名称と同様のメソッドを定義する。
これで、addボタン押下時にはaddメソッドが、deleteボタン押下時にはdeleteメソッドが実行されるようになる。
<html:form action="/DispatchAction">
<html:submit property="command" value="add">add</html:submit>
<html:submit property="command" value="delete">delete</html:submit>
</html:form>
struts-config.xmlには parameter="[リクエストパラメータ名]"を設定する。
<action path="/DispatchAction"
type="struts.dispatchaction.DispatchActionSample"
name="DummyForm"
parameter="command"
scope="request">
<forward name="success"
path="/pages/dispatchaction/index.jsp" />
</action>
DispatchActionを継承したアクションクラスを作成し、html:submitボタンのvalue句に指定した名称と同様のメソッドを定義する。
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import util.logging.LogManager;
public class DispatchActionSample extends DispatchAction{
private Log log = LogManager.getLogger(this.getClass());
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception{
log.debug("add");
return mapping.findForward("success");
}
public ActionForward delete(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception{
log.debug("delete");
return mapping.findForward("success");
}
}
これで、addボタン押下時にはaddメソッドが、deleteボタン押下時にはdeleteメソッドが実行されるようになる。

浙公网安备 33010602011771号