Action[/myaction] does not contain specified method (check logs)
Posted on 2009-07-27 21:13 wesley1987 閱讀(4248) 評論(2) 編輯 收藏在使用DispatchAction時出現了這個問題,從這句話分析,就是沒有在指定的類中,找到對應的方法。
先說結論: 在Action中定義的方法(要在參數中使用的方法),參數一定要固定為
(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response )
--------------------------------
這種錯誤,一般在保證所有路徑的拼寫都正確的情況下應該就能避免,
那接著分析一下,struts是如何從jsp一步步找到這個方法呢?
1 頁面上 action的路徑,以及對應的struts配置文件中定義的parameter的參數名(我這叫method)屬性值,這個屬性值應對應著 Action類的方法名。
2 確認了以上路徑都正確的情況下,考慮到DispatchAction對應“方法”的方式,發現原來是方法多了一個參數。
順便看了下DispatchAction源代碼,看到里面找方法的時候,用的是
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
});
就是說,DispatchAction只會將參數固定為以上4中的函數作為控制器方法使用。