睫晉姬

          幾種DispatchAction的區別

            java.lang.Object

            org.apache.struts.action.Action

            org.apache.struts.actions.DispatchAction

            org.apache.struts.actions.LookupDispatchAction(Struts1.1)

            org.apache.struts.actions.EventDispatchAction(Struts1.2.9)

            org.apache.struts.actions.MappingDispatchAction(Struts1.2)

            DispatchAction

            public abstract class DispatchAction extends Action

            這是一個抽象的Action,它會根據request 中的parameter來執行相應的方法。通個這個Action類可以將不同的Action集中到一個Action文件中來。

            struts-config.xml:

            <action path="/subscription" type="org.example.SubscriptionAction" name="subscriptionForm"  scope="request" input="/subscription.jsp" parameter="method"/>

            在Action中要有相應的方法:

            public class SubscriptionAction extends DispatchAction {

            public ActionForward delete(ActionMapping mapping, ActionForm form,

            HttpServletRequest request,

            HttpServletResponse response) throws Exception {}

            public ActionForward insert(ActionMapping mapping, ActionForm form,

            HttpServletRequest request,

            HttpServletResponse response) throws Exception {}

            public ActionForward update(ActionMapping mapping, ActionForm form,

            HttpServletRequest request,

            HttpServletResponse response) throws Exception {}

            }

            然后可以通過這樣的方法來訪問你的程序:

            http://localhost:8080/myapp/subscription.do?method=delete

            http://localhost:8080/myapp/subscription.do?method=insert

            http://localhost:8080/myapp/subscription.do?method=update

            如果parameter中參數為空,則調用Action中的unspecified方法

            LookupDispatchAction

            public abstract class LookupDispatchAction extends DispatchAction

            通過這個Action抽象類繼承DispatchAction,它的相應方法的執行由ActionMapping中parameter屬性決定。每個動作實際上就是<html:submit>標簽的property屬性值。它適合在一個form中有很多按鈕,按不同的按鈕則執行不同的操作。

            struts-config.xml:

            <action path="/subscription" type="org.example.SubscriptionAction" name="subscriptionForm" scope="request"

            input="/subscription.jsp" parameter="method"/>

            ApplicationResources.properties:

            button.add=Add Record

            button.delete=Delete Record

            JSP:

            <%@ page pageEncoding="GBK"%>

            <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>

            <html>

            <head>

            <title>多提交演示</title>

            </head>

            <body>

            <html:form action="subscription">

            <html:submit property="method">

            <bean:message key="button.add"/>

            </html:submit>

            <html:submit property="method">

            <bean:message key="button.delete"/>

            </html:submit>

            </html:form>

            </body>

            </html>
            在Action中必須實現getKeyMethodMap方法:

            public class SubscriptionAction extends LookupDispatchAction {

            protected Map getKeyMethodMap() {

            Map map = new HashMap();

            map.put("button.add", "add");

            map.put("button.delete", "delete");

            return map;

            }

            public ActionForward add(ActionMapping mapping,

            ActionForm form,

            HttpServletRequest request,

            HttpServletResponse response) throws Exception {}

            public ActionForward delete(ActionMapping mapping,

            ActionForm form,

            HttpServletRequest request,

            HttpServletResponse response) throws Exception {}

            }

            EventDispatchAction

            public class EventDispatchAction extends DispatchAction

            通過這個Action抽象類繼承DispatchAction,它的相應方法的執行由ActionMapping中parameter屬性指定多個動作,中間用逗號(,)分隔。每個動作實際上就是<html:submit>標簽的property屬性值。它適合在一個form中有很多按鈕,按不同的按鈕則執行不同的操作。

            struts-config.xml:

            (parameter中的"recalc=recalculate"意思為<html:submit>標簽的property屬性值為recalc調用recalculate方法,出于安全考慮能夠隱藏后臺的業務方法名。"defaule=save"這是可選的,沒有配置property屬性的<html:submit>標簽干洗機將調用defaule中設置的方法名,如果defaule沒有指定任何參數,則調用Action中的unspecified方法)

            <action path="/subscription" type="org.example.SubscriptionAction" name="subscriptionForm" scope="request"

            input="/subscription.jsp" parameter="save,back,recalc=recalculate,default=save"/>

            JSP:

            <%@ page pageEncoding="GBK"%>

            <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>

            <html>

            <head>

            <title>多提交演示</title>

            </head>

            <body>

            <html:form action="subscription">

            <html:submit property="save" value="保存"/>

            <html:submit property="back" value="后退"/>

            <html:submit property="recalc" value="重新計算"/>

            </html:form>

            </body>

            </html>

            在Action中要有相應的方法:

            public class SubscriptionAction extends LookupDispatchAction {

            public ActionForward save(ActionMapping mapping,

            ActionForm form,

            HttpServletRequest request,

            HttpServletResponse response) throws Exception {}

            public ActionForward back(ActionMapping mapping,

            ActionForm form,

            HttpServletRequest request,

            HttpServletResponse response) throws Exception {}

            public ActionForward recalculate(ActionMapping mapping,

            ActionForm form,

            HttpServletRequest request,

            HttpServletResponse response) throws Exception {}

            }

            MappingDispatchAction

            public class MappingDispatchAction extends DispatchAction

            它的相應方法的執行由ActionMapping中parameter名決定,注意這里和LookupDispatchAction不同,LookupDispatchAction的相應方法的執行由ActionMapping中parameter屬性決定。

            struts-config.xml:

            <action path="/createSubscription" type="org.example.SubscriptionAction" parameter="create">

            <forward name="success" path="/createSubscription.jsp"/>

            </action>

            <action path="/editSubscription" type="org.example.SubscriptionAction" parameter="edit">

            <forward name="success" path="/editSubscription.jsp"/>

            </action>

            <action path="/saveSubscription" type="org.example.SubscriptionAction" parameter="save"

            name="subscriptionForm" validate="true" input="/editSubscription.jsp" scope="request">

            <forward name="success" path="/savedSubscription.jsp"/>

            </action>

            <action path="/deleteSubscription" type="org.example.SubscriptionAction" name="subscriptionForm"

            scope="request" input="/subscription.jsp" parameter="delete">

            <forward name="success" path="/deletedSubscription.jsp"/>

            </action>

            <action path="/listSubscriptions" type="org.example.SubscriptionAction" parameter="list">

            <forward name="success" path="/subscriptionList.jsp"/>

            </action>

            在Action中要有相應的方法:

            public class SubscriptionAction extends MappingDispatchAction {

            public ActionForward create(ActionMapping mapping, ActionForm form,

            HttpServletRequest request,

            HttpServletResponse response) throws Exception {}

            public ActionForward edit(ActionMapping mapping, ActionForm form,

            HttpServletRequest request,

            HttpServletResponse response) throws Exception {}

            public ActionForward save(ActionMapping mapping, ActionForm form,

            HttpServletRequest request,

            HttpServletResponse response) throws Exception {}

            public ActionForward delete(ActionMapping mapping, ActionForm form,

            HttpServletRequest request,

            HttpServletResponse response) throws Exception {}

            public ActionForward list(ActionMapping mapping, ActionForm form,

            HttpServletRequest request,

            HttpServletResponse response) throws Exception {}

            }

          posted on 2009-12-05 16:59 睫晉姬 閱讀(218) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 东港市| 井研县| 长垣县| 武汉市| 台山市| 永春县| 祁连县| 临汾市| 吴江市| 泌阳县| 辰溪县| 瑞金市| 福鼎市| 新建县| 广灵县| 同德县| 武鸣县| 东阳市| 同心县| 湘潭市| 黑山县| 华阴市| 河南省| 米泉市| 徐闻县| 满城县| 宜昌市| 大化| 平武县| 焉耆| 佛山市| 手游| 十堰市| 贵德县| 深州市| 云霄县| 彭泽县| 中牟县| 九江县| 汶上县| 乐安县|