LookupDispatchAction是DispatchAction的子類。他的作用是將多個響應用戶請求的Action方法放置在同一個Action中。
LookupDispatchAction主要適合用于頁面中同一個表單具有多個提交按鈕,每個提交按鈕要遞交給不同的Action處理方法的情況。
LookupDispatchAction所執行的方法也是依據頁面傳遞的參數來確定的。而具體執行哪個Action方法則是由用戶提交參數的值、資源文件、定義的映射方法所共同決定的。
具體請參考下面的例題:
1、先在JSP頁面中使用如下的提交按鈕:
#test.jsp
<html:form action="/test">
<!--property屬性的值一定與ActionMapping中的parameter屬性的值相同-->
<html:submit property="method"><bean:message key="button.add"/></html:submit>
<html:submit property="method"><bean:message key="button.delete"/></html:submit>
</html:form>
2、在Struts的配置文件中設置paramerter屬性:
#struts-config.xml
<!-- parameter屬性指頁面中按鈕的名稱,其中的name屬性中的ActionForm隨便建個就行我的是空的 -->
<action path="/test" type="action.TestLookUpDispatchAction" scope="request" input="test.jsp" parameter="method" ></action>
3、創建一個繼承LookupDispatchAction的類,名叫TestLookUpDispatchAction放在action包下:
#TestLookUpDispatchAction.java
package action;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.LookupDispatchAction;
public class TestLookUpDispatchAction extends LookupDispatchAction {
@Override
protected Map getKeyMethodMap() {// 定義資源文件關鍵字與Action方法之間的映射關系
Map<String, String> map = new HashMap<String, String>();
map.put("button.add", "add");
map.put("button.delete", "delete");
return map;
}// 自定義的方法
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
System.out.println("執行add方法成功");
return null;
}
// 自定義的方法
public ActionForward delete(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
System.out.println("執行delete方法成功");
return null;
}
}
4、在資源文件中為每個標記定義顯示信息:
message.properties
button.add=add
button.delete=delete
這樣就OK了,你可以試一下是否能調用到自己想要的方法。有什么問題可以聯系我。