原来用的struts2.0版本,运行项目没有问题。后来换了struts2.2.1版本后,只要访问Action,都会出现
java.lang.NoSuchMethodException: com.struts.action.UserAction.create()类似的错误,就是说Action中找不到create这个方法。
struts.xml
我设定的是方法拦截,所以当进入user_update.action的时候,没有问题,因为它可以进入拦截器。但是我没有拦截login和register方法,进入这两个方法时就会出错。说找不到create方法。我Action里面没有这个方法,肯定找不到。而且继承的ActionSupport的里面也没有这个方法,只有excute方法。不知道为什么struts会非要找这个create方法!后来上网查了半天,人家说去掉<include file="defaults.xml"></include>这部分就可以。
defaults.xml
试了下,果然奏效。但是用原来struts2.0的版本没有这样的问题啊!不知道为什么,哪位高人来解释下,感激不尽!最好能带 struts的源代码分析下!还有struts2.0和2.1之后的地方,有哪些区别?
Oh My God!现在又不行了。不知道是不是我刚才手动加的create方法没去掉,现在又报这个错误,蛋疼啊!高手速来解答!感激不尽啊!
------------------------------------------------------------------------------------------------------------------
问题补充:
那我手动加个create方法就OK,应该不会错的吧?
java.lang.NoSuchMethodException: com.struts.action.UserAction.create()类似的错误,就是说Action中找不到create这个方法。
struts.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <include file="defaults.xml"></include>
- <package name="struts.action.user" namespace="/user" extends="struts-default">
- <interceptors>
- <interceptor name="loginInterceptor" class="com.innoact.struts.interceptor.LoginInterceptor">
- </interceptor>
- </interceptors>
- <action name="user_*" class="com.innoact.struts.action.UserAction" method="{1}">
- <interceptor-ref name="loginInterceptor">
- <param name="excludeMethods">login,register</param>
- <param name="includeMethods">update</param>
- </interceptor-ref>
- <interceptor-ref name="defaultStack"></interceptor-ref>
- <result name="success">/main.jsp</result>
- <result name="login">/index.jsp</result>
- </action>
- </package>
- </struts>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <include file="defaults.xml"></include> <package name="struts.action.user" namespace="/user" extends="struts-default"> <interceptors> <interceptor name="loginInterceptor" class="com.innoact.struts.interceptor.LoginInterceptor"> </interceptor> </interceptors> <action name="user_*" class="com.innoact.struts.action.UserAction" method="{1}"> <interceptor-ref name="loginInterceptor"> <param name="excludeMethods">login,register</param> <param name="includeMethods">update</param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> <result name="success">/main.jsp</result> <result name="login">/index.jsp</result> </action> </package> </struts>
我设定的是方法拦截,所以当进入user_update.action的时候,没有问题,因为它可以进入拦截器。但是我没有拦截login和register方法,进入这两个方法时就会出错。说找不到create方法。我Action里面没有这个方法,肯定找不到。而且继承的ActionSupport的里面也没有这个方法,只有excute方法。不知道为什么struts会非要找这个create方法!后来上网查了半天,人家说去掉<include file="defaults.xml"></include>这部分就可以。
defaults.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <package name="defaults" extends="struts-default">
- <global-results>
- <result name="error">/error.jsp</result>
- </global-results>
- <global-exception-mappings>
- <exception-mapping exception="java.lang.NullPointerException" result="error" />
- <exception-mapping exception="java.lang.Exception" result="error" />
- </global-exception-mappings>
- </package>
- </struts>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="defaults" extends="struts-default"> <global-results> <result name="error">/error.jsp</result> </global-results> <global-exception-mappings> <exception-mapping exception="java.lang.NullPointerException" result="error" /> <exception-mapping exception="java.lang.Exception" result="error" /> </global-exception-mappings> </package> </struts>
试了下,果然奏效。但是用原来struts2.0的版本没有这样的问题啊!不知道为什么,哪位高人来解释下,感激不尽!最好能带 struts的源代码分析下!还有struts2.0和2.1之后的地方,有哪些区别?
Oh My God!现在又不行了。不知道是不是我刚才手动加的create方法没去掉,现在又报这个错误,蛋疼啊!高手速来解答!感激不尽啊!
------------------------------------------------------------------------------------------------------------------
问题补充:
songfantasy 写道
你的类编译的有问题吧,怎么会找create这个方法呢?
那我手动加个create方法就OK,应该不会错的吧?