簡介 DispatchAction就是在struts-config中用parameter參數配置一個表單字段名,這個字段的值就是最終替代execute被調用的方法.
例如
parameter="method"
而request.getParameter("method")="save",
其中"save"就是MethodName。
struts的請求將根據parameter被分發到"save"或者"edit"或者什么。
但是有一點,save()或者edit()等方法的聲明和execute必須一模一樣。
LookupDispatchAction繼承DispatchAction, 用于對同一個頁面上的多個submit按鈕進行不同的響應。
其原理是,首先用MessageResource將按鈕的文本和資源文件的key相關聯,
例如button.save=保存;然后再復寫getKeyMethodMap(), 將資源文件的key和MethodName對應起來,
例如map.put("button.save", "save"); 其配置方法和DispatchAction是一樣的, 使用時要這么寫:
LookupDispatchAction的使用
1) 類編寫規范 BaseAction繼承LookupDispatchAction,且必須實現方法protected Map getKeyMethodMap()。
這個方法將構建資源key和方法名稱對,放到Map里面返回。
代碼如下:
(非 Javadoc)
* @see org.apache.struts.actions.LookupDispatchAction#getKeyMethodMap() */
protected Map getKeyMethodMap()
{
Map map = new HashMap();
String pkg = this.getClass().getPackage().getName();
ResourceBundle methods = ResourceBundle.getBundle(pkg + ".LookupMethods");
Enumeration keys = methods.getKeys();
while (keys.hasMoreElements())
{ String key = (String) keys.nextElement();
?map.put(key, methods.getString(key));
?}
return map; }
2) 資源文件這個例子中,將資源key和方法名稱對放到資源文件LookupMethods.properties中。
資源文件LookupMethods.properties的內容如下:
button.edit=edit button.delete=delete ...... 然后,
在struts的MessageResource使用的資源文件如
ApplicationResource.properties 中添加資源key的值:
button.edit=編輯 button.delete=刪除 ...... 當然必須用ascii2native轉換成unicode。
3) 頁面編寫然后界面中就可以使用以下方式提交:
或者
編輯 4) 配置 method屬性是指定的分發屬性,在struts-config.xml中配置。action的配置應該加上parameter="method"來指定。
如:
配置好后,按上面所描述的方式提交,BaseAction類將分幾步執行:
從配置中取得parameter屬性的值,這里為“method”。 再按method找到提交的屬性中取得method屬性的值,這里為“編輯”。
從MessageResource使用的資源文件中取得“編輯”對應的key,這里為“button.edit”。
從getKeyMethodMap方法返回的Map中取得改key值對應的方法名稱,這里為“edit”。 調用BaseAction類的方法edit。