資料整理

           

          Sturts ---DispatchAction的使用

          Struts心得--DispatchAction使用日記

          Struts1.1發布了這么長時間了,我才剛剛開始系統地學習Struts的相關知識,經過前一陣潛心研究,對Struts1.1中已有的類DispatchAction有了進一步的認識。我將在這里總結一下,希望能對大家有所幫助。
            
            在1.0版本中我們通常都是用execute方法來完成我們對業務邏輯的處理及頁面的轉發。通常在一個Action中我們都只能夠完成一種業務邏輯的操作。如果要是完成多個業務邏輯(比如:添加、刪除等)功能相近的業務邏輯我們就沒有辦法了么?答案是否定的,我們可以通過在頁面中定義一個隱藏變量,在不同的頁面要求處理不同的業務邏輯的時候我們可以賦予這個變量不同的值,并在execute方法中通過對變量值的判斷來完成不同的業務邏輯操作。
            
            舉例來說,我們首先在頁面中定義一個隱藏變量。
            
            <;html:hidden property="operAt"/>
            
            然后定義一個JavaScript函數,我們可以在通過點擊提交按鈕的時候,在函數體里面修改它的值。
            
            <;SCRIPT>
            
            function set(key) {
            
            with(document.forms[0]){
            
            operAt.value=key;
            
            }
            
            }
            
            <;/SCRIPT>
            
            當我們點擊提交按鈕便觸發該事件,修改變量的值。
            
            <;html:submit onclick="set('save');">SAVE<;/html:submit>
            
            那我們在后臺execute中又如何處理相關邏輯呢?
            
            String operAt = myForm.getOperAt();
            
            if (operAt.equals("create")) { ……
            
            if (operAt.equals("save")) { ……
            
            很簡單吧!雖然說這樣做我們可以實現多個業務邏輯在同一個Action中實現,可是帶來的代價便是代碼的冗長,不易理解。
            
            下面我們就要介紹一下DispatchAction類了。它是Action的一個子類,它可以實現多個業務邏輯在同一個Action當中的實現,而上面的例子在DispatchAction中也就變成了下面的形式:
            
            public ActionForward create(
            
            ActionMapping mapping,
            
            ActionForm form,
            
            HttpServletRequest request,
            
            HttpServletResponse response)
            
            throws Exception { ……
            
            public ActionForward save(
            
            ActionMapping mapping,
            
            ActionForm form,
            
            HttpServletRequest request,
            
            HttpServletResponse response)
            
            throws Exception { ……
            
            每一種業務邏輯都能在DispatchAction當中找到對應的方法。那么我們如何去實現這樣的調用呢?DispatchAction中對struts-config.xml的配置比一般的Action配置稍顯麻煩,舉例來講:
            
            <;action path="/telConsle" type="com.meng.action.TelConsleDispatch"
            
            name="telForm" scope="request" validate="false" parameter="method"/>
            
            我們在這里指定了parameter的值為method,而當我們請求Action的時候我們必須指定method的值來確定去我們想要調用哪個Action方法。如:
            
            http://localhost:8080/tsss/telConsle.do?method=save
            
            顯然,通過顯示鏈接指定參數值的方法可以達到我們調用方法的目的。然而我們如果不想顯示調用的話我們應該怎樣處理呢?還記得前面講過的方法么?我們在頁面中定義一個隱藏的變量,然后通過對變量的賦值來確定我們來確定我們將要執行的業務方法。在這里我們可不可以一樣這樣使用呢?
            
            答案是肯定的,我們當然可以通過定義一個類似于<;html:hidden property="operAt"/>的變量,只要對該變量賦上對應DispatchAction中的方法的值來確定我們要調用的業務方法。然而筆者比提倡用Struts標簽來定義這樣的隱含的變量,因為Struts標簽為動態標簽,它可能需要在FormBean中定義該屬性的get和set方法,而在parameter中定義的值不需要在FormBean當中定義get和set方法。筆者建議用html的標準標簽<;input>來定義該隱藏變量。因為該標簽為靜態標簽,如果我們該用Struts標簽的話可能導致頁面出錯。


          我們在頁面上有多個按鈕
          我們就用那么DispatchAction
          控制我們想要做的事
          我們先在頁面用其所長<html:hidden property="method " value=""/>來隱葳變量
          我們用javascript告訴我們要做什么事也就是用戶點擊了那個鈕?\\
          我想我們用這個就有一點好處就是頁面有javaxcript提示出來就是有一點人性化
          我相我們用他的子類會更好些
          我認為我們用了javacript以后我們的頁面就多了很多代碼量
          我們用lookupdispacthaction也行

          posted on 2006-08-21 13:32 謝瑋 閱讀(451) 評論(0)  編輯  收藏 所屬分類: 流行框架 、Web

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          主站蜘蛛池模板: 绥芬河市| 容城县| 喜德县| 石河子市| 卢龙县| 延长县| 汉川市| 类乌齐县| 康保县| 峨眉山市| 福安市| 大竹县| 琼海市| 大关县| 靖西县| 稻城县| 仁寿县| 汝阳县| 揭东县| 黑龙江省| 太和县| 林口县| 高邮市| 泊头市| 南郑县| 新乡县| 博客| 郁南县| 晋城| 保康县| 灵台县| 韶关市| 宜兰县| 郯城县| 察雅县| 侯马市| 普陀区| 美姑县| 府谷县| 克什克腾旗| 正镶白旗|