<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 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks
    • DispatchAction:一個(gè)Action 完成多個(gè)動作
    • MappingDispatchAction(主要用他):一個(gè)Action 完成多個(gè)動作,優(yōu)點(diǎn):思路清晰
    • LookupDispatchAction:用于一個(gè)表單多個(gè)提交按鈕。
    注意:在使用繼承Struts預(yù)定義的Action類,一定不要覆蓋execute方法,否則會導(dǎo)致無法調(diào)用自定義Action相應(yīng)方法。

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

    DispatchAction類是Action類的子類,他提供了有實(shí)現(xiàn)的execute方法。

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

    注意:使用繼承DispatchAction類的自定義的Action,只會匹配一個(gè)action路徑,只能共享一個(gè)ActionForm,如果加上校驗(yàn),會產(chǎn)生form表單的參數(shù)不一致的情況,會導(dǎo)致校驗(yàn)無法通過。


    例:
    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中隱藏域的名字相對應(yīng)的-->
        <forward name="sucess" path="/sucess.jsp"/>
    </action>

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

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

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


    例:
    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屬性是指定調(diào)用方法的名字-->
       <forward name="add" path="/add.jsp"/>
    </action>       
    <action path="/del"  type="MyAction" parameter="del">
       <forward name="del" path="/del.jsp"/>
    </action>

    在JSP頁面中也不用在使用隱藏域傳遞參數(shù),直接在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類的子類,他所實(shí)現(xiàn)的功能是解決一個(gè)表單多種提交問題的
    ,他是通過使用資源文件,用submit按鈕的value來作為資源文件中的key所對應(yīng)的值,通過這個(gè)值來找到對用的key,在使用這個(gè)key來獲得指定Map中所對應(yīng)的值,這個(gè)值就是要調(diào)用的方法名。

    submit的value---->MessageResource.properties中的key----->Map中key對相應(yīng)的值---->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標(biāo)簽中的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時(shí),要覆蓋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類的一些規(guī)則
    1,盡量不要在Action類中使用(靜態(tài))成員變量,如果使用要加上同步。
    2,盡量使各模塊間的耦合性降低,最大限度的針對接口編程。
    3,可以將共代碼方在覆蓋父類的方法中,最后可以用super.xxx(xxx)來調(diào)用父類的方法,使用父類的實(shí)現(xiàn),并加上了自定義的功能。
    posted on 2008-04-19 21:01 seal 閱讀(315) 評論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 免费无遮挡无码视频在线观看 | 亚洲午夜国产片在线观看| 国产hs免费高清在线观看| 亚洲区视频在线观看| 免费A级毛片无码久久版| 日本三级在线观看免费| 亚洲熟妇无码八V在线播放| 毛片免费在线视频| 一本色道久久88—综合亚洲精品| 亚洲精品无码久久久久AV麻豆| 91精品免费观看| 日日摸日日碰夜夜爽亚洲| 亚洲精品成人久久| 97人妻无码一区二区精品免费| 野花视频在线官网免费1| 久久久久久亚洲Av无码精品专口| 三年片在线观看免费观看大全一 | 国产猛男猛女超爽免费视频| 亚洲Av无码精品色午夜| 精品国产免费观看| 日韩精品久久久久久免费| 亚洲理论片在线中文字幕| 亚洲国产综合久久天堂| 毛片免费视频在线观看| 黄色片免费在线观看| 美女的胸又黄又www网站免费| 亚洲成AV人片久久| 国产高清在线免费| xxxxwww免费| 三级黄色免费观看| 亚洲日本香蕉视频| 国产精品亚洲一区二区三区在线 | 久久亚洲国产成人亚| 免费一级国产生活片| 国拍在线精品视频免费观看 | 最近的免费中文字幕视频| 国产高清不卡免费视频| fc2免费人成为视频| 久久亚洲私人国产精品| 亚洲色自偷自拍另类小说 | 国产V亚洲V天堂无码久久久|