Struts心得—DispatchAction使用日記

來源:互聯網
上載者:User
心得
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標籤的話可能導致頁面出錯。







       怎麼樣?通過上面的論述,您是否能夠對DistpatchAction有了初步瞭解呢?關於DispatchAction用法小弟還是出此體驗,有什麼不足之處還希望各位大蝦能批評指點!


相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

11.11 Big Sale for Cloud

Get Unbeatable Offers with up to 90% Off,Oct.24-Nov.13 (UTC+8)

Get It Now >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。