Action[/myaction] does not contain specified method (check logs)
Posted on 2009-07-27 21:13 wesley1987 閱讀(4250) 評(píng)論(2) 編輯 收藏在使用DispatchAction時(shí)出現(xiàn)了這個(gè)問(wèn)題,從這句話分析,就是沒(méi)有在指定的類中,找到對(duì)應(yīng)的方法。
先說(shuō)結(jié)論: 在Action中定義的方法(要在參數(shù)中使用的方法),參數(shù)一定要固定為
(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response )
--------------------------------
這種錯(cuò)誤,一般在保證所有路徑的拼寫(xiě)都正確的情況下應(yīng)該就能避免,
那接著分析一下,struts是如何從jsp一步步找到這個(gè)方法呢?
1 頁(yè)面上 action的路徑,以及對(duì)應(yīng)的struts配置文件中定義的parameter的參數(shù)名(我這叫method)屬性值,這個(gè)屬性值應(yīng)對(duì)應(yīng)著 Action類的方法名。
2 確認(rèn)了以上路徑都正確的情況下,考慮到DispatchAction對(duì)應(yīng)“方法”的方式,發(fā)現(xiàn)原來(lái)是方法多了一個(gè)參數(shù)。
順便看了下DispatchAction源代碼,看到里面找方法的時(shí)候,用的是
method = clazz.getMethod(name, types);
其中
clazz = getClass();
types = (new Class[] {
org.apache.struts.action.ActionMapping.class, org.apache.struts.action.ActionForm.class, javax.servlet.http.HttpServletRequest.class, javax.servlet.http.HttpServletResponse.class
});
就是說(shuō),DispatchAction只會(huì)將參數(shù)固定為以上4中的函數(shù)作為控制器方法使用。