struts2异常java.lang.NoSuchMethodException: com.struts.action.UserAction.create()

原来用的struts2.0版本,运行项目没有问题。后来换了struts2.2.1版本后,只要访问Action,都会出现
java.lang.NoSuchMethodException: com.struts.action.UserAction.create()类似的错误,就是说Action中找不到create这个方法。
struts.xml
Xml代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE struts PUBLIC   
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5. <struts>  
  6.     <include file="defaults.xml"></include>  
  7.     <package name="struts.action.user" namespace="/user" extends="struts-default">  
  8.         <interceptors>  
  9.             <interceptor name="loginInterceptor" class="com.innoact.struts.interceptor.LoginInterceptor">  
  10.             </interceptor>  
  11.         </interceptors>  
  12.         <action name="user_*" class="com.innoact.struts.action.UserAction" method="{1}">  
  13.             <interceptor-ref name="loginInterceptor">  
  14.                 <param name="excludeMethods">login,register</param>  
  15.                 <param name="includeMethods">update</param>  
  16.             </interceptor-ref>  
  17.             <interceptor-ref name="defaultStack"></interceptor-ref>  
  18.             <result name="success">/main.jsp</result>  
  19.             <result name="login">/index.jsp</result>  
  20.         </action>  
  21.     </package>  
  22.         
  23. </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代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE struts PUBLIC   
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5. <struts>  
  6.     <package name="defaults" extends="struts-default">  
  7.         <global-results>  
  8.             <result name="error">/error.jsp</result>  
  9.         </global-results>  
  10.            
  11.         <global-exception-mappings>  
  12.             <exception-mapping exception="java.lang.NullPointerException" result="error" />  
  13.             <exception-mapping exception="java.lang.Exception" result="error" />  
  14.         </global-exception-mappings>  
  15.     </package>  
  16. </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,应该不会错的吧?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值