DispatchAction

アクションを分離する

ひとつのForm内に複数のsubmitボタンがあり、それぞれ異なるアクションを実行したい場合に、DispatchActionを利用することで、JavaScriptによるSubmitの制御や、if文による実行ロジックの判定などを排除することができる。

実装

submitボタンにproperty句を指定し、任意の名称を設定する。
<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メソッドが実行されるようになる。
posted @ 2008-10-16 17:42  易欧  阅读(219)  评论(0)    收藏  举报