【轉】

DispatchAction 和LookupDispatchAction和MappingDispatchAction
不知道有沒有人在實際中使用過struts的DispatchAction系列? 誰又能給我明白的講講DispatchAction, LookupDispatchAction, MappingDispatchAction各自的用法和區別呢?

1) DispatchAction就是在struts-config中用parameter參數配置一個表單字段名,這個字段的值就是最終替代execute被調用的方法. 例如parameter="method"而request.getParameter("method")="save",其中"save"就是MethodName。struts的請求將根據parameter被分發到"save"或者"edit"或者什麼。但是有一點,save()或者edit()等方法的聲明和execute必須一模一樣。

2) LookupDispatchAction繼承DispatchAction, 用於對同一個頁面上的多個submit按鈕進行不同的響應。其原理是,首先用MessageResource將按鈕的文本和ResKey相關聯,例如button.save=保存;然後再複寫getKeyMethodMap(), 將ResKey和MethodName對應起來, 例如map.put("button.save", "save"); 其配置方法和DispatchAction是一樣的, 使用時要這麼寫:
<?xml:namespace prefix = html />
<html:submit property="method">
<bean:message key="button.save">
</bean:message>
</html:submit>

3) MappingDispatchAction是1.2新加的, 也繼承自DispatchAction. 它實現的功能和上面兩個區別較大, 是通過struts-config.xml將多個action-mapping映射到同一個Action類的不同方法上, 典型的配置就是:
<ACTION-MAPPINGS>
<ACTION parameter="save" type="logic.UserAction" path="/saveUser"></ACTION>

</ACTION-MAPPINGS>
然後UserAction繼承MappingDispatchAction,其中有:
public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
public ActionForward edit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
等方法

可以看到, 不管怎麼變化, 其實這些類都是把execute給分解開, 不管是save, edit還是其他什麼方法, 其實都是和原來的execute是等價的, save和edit之間沒有任何直接的關係, 而事實呢,它們是同一個業務模型的兩種不同操作。 我覺得這就是一個問題,對於save和edit這兩種請求, 我後臺邏輯有可能只是調用service的方法那一句不一樣,其他代碼是完全一致的(例如錯誤處理, 日誌記錄等)。因此我想出了這個小東西,在execute方法內部進行局部分解。
發佈了4 篇原創文章 · 獲贊 0 · 訪問量 1134
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章