<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sealyu

    --- 博客已遷移至: http://www.sealyu.com/blog

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
    • DispatchAction:一個Action 完成多個動作
    • MappingDispatchAction(主要用他):一個Action 完成多個動作,優點:思路清晰
    • LookupDispatchAction:用于一個表單多個提交按鈕。
    注意:在使用繼承Struts預定義的Action類,一定不要覆蓋execute方法,否則會導致無法調用自定義Action相應方法。

    DispatchAction類(org.apache.struts.actions.DispatchAction)

    DispatchAction類是Action類的子類,他提供了有實現的execute方法。

    我們寫的自定義Action類,可以繼承DispatchAction類,但不要覆蓋execute方法,可以在自定義類中寫反回值和參數表都與execute方法相同的方法,可以通過在struts-congfig.xml中為這個action的配置中添加一個參數,來判斷調哪一個方法,實際上DispatchAction類就是通過反射機制,通過form中參數調用了自定義Action中的方法,當然這些方法的定義要符合規范,使用繼承DispatchAction類的自定義的Action類,也就會共享同一的Action路徑。

    注意:使用繼承DispatchAction類的自定義的Action,只會匹配一個action路徑,只能共享一個ActionForm,如果加上校驗,會產生form表單的參數不一致的情況,會導致校驗無法通過。


    例:
    public class MyAction extends DispatchAction{
        ActionForward add(ActionForm form,HttpServletRequest request,HttpServletResponse                                         response ActionMapping mapping) throws Exception
            {
                        return mapping.findForward("sucess")                    
            }
    }

    <action path="/add"  type="MyAction" parameter="methodName">
        <!--parameter屬性是和form中隱藏域的名字相對應的-->
        <forward name="sucess" path="/sucess.jsp"/>
    </action>

    <from action="add.do" method="post">
       <input type="hidden" name="methodName" value="add"/>
       <!--
          使用隱藏域為struts傳遞要調用自定義Action中方法的方法名,是通過與struts-config.xml
          中action標簽中的parameter和name屬性相對應來獲取隱藏域的value。
       -->
       <input type="submit" value="submit"/>
    </from>

    MappingDispatchAction類(org.apache.struts.actions.MappingDispatchAction)

    MappingDispatchAction類是DispatchAction的子類,他和DispatchAction不同點就是可以去匹配多個action路徑,這樣也就是結決了共用ActoinForm的校驗問題了,多個Action的路徑使用同一的自定義Action類,這樣就不用共享同一個ActionForm,也就不會有校驗問題了。


    例:
    public class MyAction extends MappingDispatchAction{
        ActionForward add(ActionForm form,HttpServletRequest request,HttpServletResponse                                         response ActionMapping mapping) throws Exception
            {
                        return mapping.findForward("add")                    
            }
            ActionForward del(ActionForm form,HttpServletRequest request,HttpServletResponse                                         response ActionMapping mapping) throws Exception
            {
                        return mapping.findForward("del")                    
            }
    }

    <action path="/add"  type="MyAction" parameter="add">
       <!--parameter屬性是指定調用方法的名字-->
       <forward name="add" path="/add.jsp"/>
    </action>       
    <action path="/del"  type="MyAction" parameter="del">
       <forward name="del" path="/del.jsp"/>
    </action>

    在JSP頁面中也不用在使用隱藏域傳遞參數,直接在form中的action中就可以直接使用xxx.do匹配了。
    <form action="add.do" method="post">
       <input type="submit" value="submit"/>
    </form>
    <form action="del.do" method="post">
       <input type="submit" value="submit"/>
    </form>

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

    LookupDispatchAction類也是DispatchAction類的子類,他所實現的功能是解決一個表單多種提交問題的
    ,他是通過使用資源文件,用submit按鈕的value來作為資源文件中的key所對應的值,通過這個值來找到對用的key,在使用這個key來獲得指定Map中所對應的值,這個值就是要調用的方法名。

    submit的value---->MessageResource.properties中的key----->Map中key對相應的值---->action

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

    <form method="post" action="${pageContext.request.contextPath}/lookup/adddel.do">
        <input type="submit" value="<bean:message key="button.add" />" name="methodName">
            <!--注意name="methodName"是和strut-config.xml中action標簽中的parameter屬性-->
        <input type="submit" value="<bean:message key="button.delete" />" name="methodName">
    </form>

    MessageResource.properties

    button.add=add new user
    button.delete=delete user

    注意:在繼承LookupDispatchAction時,要覆蓋getKeyMethodMap()方法,并定義Map,向Map中放入指定的鍵值對。

    public class AddDelLookupDispatchAction extends LookupDispatchAction
    {
        public Map getKeyMethodMap(){
            Map keyMethodMap= new HashMap();
            keyMethodMap.put("button.add", "add");
            keyMethodMap.put("button.delete", "delete");
            return keyMethodMap;
        }   
        public ActionForward add(ActionMapping mapping,ActionForm form,
                       HttpServletRequest request,HttpServletResponse response) throws Exception
        {   
            return mapping.findForward("add");
        }
        public ActionForward delete(ActionMapping mapping,ActionForm form,
                       HttpServletRequest request,HttpServletResponse response) throws Exception
        {
            return mapping.findForward("delete");
        }
    }

    <action   path="/lookup/adddel"  type="alan.struts.actions.AddDelLookupDispatchAction"
                      parameter="methodName">
                <forward name="add" path="/add.jsp"/>
                <forward name="delete" path="/delete.jsp" />
    </action>
    <message-resources parameter="alan.struts.message.MessageResource" />

    自定義的Action類的一些規則
    1,盡量不要在Action類中使用(靜態)成員變量,如果使用要加上同步。
    2,盡量使各模塊間的耦合性降低,最大限度的針對接口編程。
    3,可以將共代碼方在覆蓋父類的方法中,最后可以用super.xxx(xxx)來調用父類的方法,使用父類的實現,并加上了自定義的功能。
    posted on 2008-04-19 21:01 seal 閱讀(315) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲欧洲日产专区| 亚洲天堂一区二区三区四区| 亚洲精品国产精品| 9久9久女女免费精品视频在线观看 | 亚洲男女一区二区三区| 无码人妻AV免费一区二区三区 | 日本免费v片一二三区| 亚洲欧美乱色情图片| 国产免费资源高清小视频在线观看| 亚洲熟妇AV乱码在线观看| 好爽又高潮了毛片免费下载| 亚洲日产乱码一二三区别| 日韩a级毛片免费观看| 五月天婷婷免费视频| 亚洲国产成人片在线观看无码| 国产成人免费视频| 亚洲精品91在线| 免费观看理论片毛片| 一级毛片免费播放视频| 久久久久亚洲AV成人无码| 国产高清不卡免费在线| 亚洲国产成人久久精品大牛影视| 免费在线观看亚洲| 久久99毛片免费观看不卡| 亚洲人成在线免费观看| 全部免费毛片免费播放| 野花香高清视频在线观看免费| 亚洲成a人不卡在线观看| 国产免费av一区二区三区| 两个人看的www免费| 亚洲性无码av在线| 免费观看四虎精品国产永久 | 18禁成人网站免费观看| 亚洲精品成a人在线观看☆| 亚洲女人被黑人巨大进入| 99热这里有免费国产精品| 亚洲欧美综合精品成人导航| 最新精品亚洲成a人在线观看| 国产精品免费精品自在线观看| 亚洲精品色在线网站| 亚洲精品无码不卡|