<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)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 国产成人亚洲精品91专区手机| 免费无码黄十八禁网站在线观看| 免费永久在线观看黄网站| 亚洲国产91在线| 在线a级毛片免费视频| 亚洲AV综合色区无码二区爱AV| 国产香蕉免费精品视频| 亚洲黄色片免费看| 99久久免费国产精品特黄| 中文字幕 亚洲 有码 在线| 24小时免费直播在线观看| 亚洲国产无线乱码在线观看| 国产成人精品男人免费| 美女视频黄频a免费| 狠狠亚洲狠狠欧洲2019| 99精品视频免费| 亚洲综合成人网在线观看| 日本阿v免费费视频完整版| 亚洲熟妇无码av另类vr影视| 免费国产美女爽到喷出水来视频| 成人免费网站久久久| 国产亚洲3p无码一区二区| 亚洲视频免费观看| 亚洲日产乱码一二三区别| 亚洲伊人久久综合中文成人网| 国产免费一区二区三区在线观看| 久久久亚洲AV波多野结衣| 午夜老司机免费视频| 一级毛片大全免费播放下载| 亚洲av无码精品网站| 日本精品人妻无码免费大全| 又黄又大的激情视频在线观看免费视频社区在线 | 免费看大美女大黄大色| 无码AV动漫精品一区二区免费| 亚洲av成人无码久久精品| 大学生高清一级毛片免费| 国产99久久久久久免费看| 亚洲最大免费视频网| 波多野结衣中文一区二区免费 | 国产精品久久久久久亚洲小说| 亚洲AV无码专区国产乱码电影|