Struts2.0和sping3.0结合 诡异异常Unable to instantiate Action

zhaoyunfullmetal 2011-11-28 07:57:52
本人在整合一个小项目,struts2.2.3版本和sping3.0结合 在登陆页面点击登陆的时候(action路径为:login.action)报了一个很诡异的异常,查了很多资料无人解读,希望有人帮忙解决一下:
exception

Unable to instantiate Action, loginAction, defined for 'login' in namespace '/'loginAction
com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:318)
com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:399)
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:198)
org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:434)

root cause

java.lang.ClassNotFoundException: loginAction
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
com.opensymphony.xwork2.util.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:157)
com.opensymphony.xwork2.ObjectFactory.getClassInstance(ObjectFactory.java:107)
com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectFactory.java:223)
。。。。。。。。。。。

在只有struts的时候项目运行是没有问题的 但是加入了sping之后就遇到了顶上的这个问题。浪费了很长时间。下面是我的配置文件:

struts.xml:

<constant name="struts.objectFactory" value="spring" />

<package name="default" extends="struts-default" >
<interceptors>
<!-- 定义AuthenticationInterceptor拦截器 -->
<interceptor name="auth"
class="interceptor.AuthenticationInterceptor"/>

<!-- 定义我们自己的拦截器栈,在Action的配置中,可以直接引用这个拦截器栈 -->
<interceptor-stack name="securityStack">

<interceptor-ref name="auth"/>
<interceptor-ref name="defaultStack">
<param name="workflow.excludeMethods">default</param>
<param name="validation.excludeMethods">default</param>
</interceptor-ref>

</interceptor-stack>
</interceptors>

<default-interceptor-ref name="securityStack"></default-interceptor-ref>

<global-results >
<result name="login">/index.jsp</result>
</global-results>

<action name="admin" class="action.AdminAction">
<result name="addSuccess">/main.jsp</result>
<result name="input">/newOperator.jsp</result>
</action>



<action name="login" class="loginAction">
<result name="success">/main.jsp</result>
<result name="login">/index.jsp</result>
</action>

</package>

applicationContext.xml:

<bean id="adminService" class="business.AdminService" scope="prototype"/>

<bean id="loginAction" class="action.LoginAction"
scope="prototype">
<property name="service" ref="adminService" />
</bean>

希望各位大牛给我指点迷津!!!!!
...全文
811 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
码农怀仔 2014-05-06
  • 打赏
  • 举报
回复
<context:component-scan base-package="cn.itcast.oa.test"/> <!-- 导入外边的jdbc.properties --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置sessionfactory --> <bean name="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <!-- 指定hibernate路径 --> <property name="configLocation" value="classpath:hibernate.cfg.xml"></property> <!-- 配置c3p0数据池 --> <property name="dataSource"> <bean class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="jdbcUrl" value="${jdbcurl}"></property> <property name="driverClass" value="${driverclass}"></property> <property name="user" value="${user}"></property> <property name="password" value="${password}"></property> <property name="initialPoolSize" value="2"/> <property name="maxPoolSize" value="20"/> <property name="minPoolSize" value="2"/> <property name="acquireIncrement" value="2"/> <property name="checkoutTimeout" value="3000"/> </bean> </property> </bean> <!-- 配置事务管理 --> <bean id="txManage" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <tx:annotation-driven tran
码农怀仔 2014-05-06
  • 打赏
  • 举报
回复
<!-- 后缀为action --> <constant name="struts.action.extension" value="action"></constant> <!-- 主题改为simple --> <constant name="struts.ui.theme" value="simple"></constant> <package name="default" namespace="/" extends="struts-default"> <!-- 配置action --> <action name="test" class="testAction"> <result name="success">/test.jsp</result> </action> <action name="role_*" class="roleAction" method="{1}"> <result name="list">/WEB-INF/jsp/roleAction/list.jsp</result> <result name="addUI">/WEB-INF/jsp/roleAction/addUI.jsp</result> <result name="aditUI">/WEB-INF/jsp/roleAction/tolist.jsp</result> <result name="tolist" type="redirectAction" >role_list</result> </action>
码农怀仔 2014-05-06
  • 打赏
  • 举报
回复
Unable to instantiate Action, roleAction, defined for 'role_list' in namespace '/'roleAction com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:307) com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:388) com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:187) org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61) org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39) com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:478) org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) root cause
eileen20 2013-06-26
  • 打赏
  • 举报
回复
21楼,22楼正解!
q394656693 2013-03-27
  • 打赏
  • 举报
回复
我也U遇到同样的问题
q394656693 2013-03-27
  • 打赏
  • 举报
回复
楼主,贴上你的web.xm看看,我的问题解决了
javayuan920 2012-09-07
  • 打赏
  • 举报
回复
如果是注解注入就加上:
<context:component-scan base-package="com.XX.*" />
wf9426555 2012-01-03
  • 打赏
  • 举报
回复
解决了吗,我也遇到这个问题,郁闷了我一天
kevin21232123 2012-01-01
  • 打赏
  • 举报
回复
我也碰到了楼主的问题,我原来是放在src/context里面的,后来做了好些测试,改了web.xml文件中的
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml,classpath*:/context/applicationContext*.xml</param-value>,也就是在classpath*:后面加上了"/context",这样就解决了,大家可以参考,我做过实验,发现我这的tomcat是只读取classpath下面的xml,大家可以参考
zhaoyunfullmetal 2011-12-05
  • 打赏
  • 举报
回复
结贴了 这个原因太坑爹了 我之前吧application.xml配置文件放在src 下面 在web.xml里面进行了配置让sping读取这个文件 今天我怒了 直接把 application.xml文件放在web-inf下面去掉 之前在web.xml里面的配置 一起都可以 我之前配置的没有问题 这个问题就是太坑爹了 !!我看着给分了
wnf2009 2011-12-01
  • 打赏
  • 举报
回复
拦截器和action的代码发上来看看,因为Action对象实例在ActionContext对象实例之前创建的,我怀疑是这里有问题
zhuyijian135757 2011-11-30
  • 打赏
  • 举报
回复
namespace 好像有默认值的哦
zhaoyunfullmetal 2011-11-30
  • 打赏
  • 举报
回复
一开始 我命名空间就没写的 但还是报错....
Unable to instantiate Action, loginAction, defined for 'login' in namespace '/'loginAction
就是报的这个错误
laixibo 2011-11-30
  • 打赏
  • 举报
回复
有时候,命名空间namespace可以去掉,不用写
zhaoyunfullmetal 2011-11-30
  • 打赏
  • 举报
回复
15楼 我改成你说的那样了 但是还是报之前的错误 无语了 我真心无助!!!
wnf2009 2011-11-30
  • 打赏
  • 举报
回复
应该是这样写

<constant name="struts.objectFactory.spring.autoWire" value="name"/>

value可取的值为name,type
name说明spring是的bean的name来注入点
type说明spring是按照bean的type来注入的。。。但当有两个bean相同type相同是,spring不知道注入哪个bean了,会引发异常
yq421434393 2011-11-29
  • 打赏
  • 举报
回复
应该是class的路径问题
jhl539570 2011-11-29
  • 打赏
  • 举报
回复
我也遇到这个问题了,你解决了没。。
zhaoyunfullmetal 2011-11-29
  • 打赏
  • 举报
回复
11楼 你给的建议我试了 不行 报相同的错误
Unable to instantiate Action, loginAction, defined for 'login' in namespace '/UserLogin'loginAction
当然你说的action路径应该是:UserLogin/login.action 没有前面的/

求帮助啊
zhaoyunfullmetal 2011-11-29
  • 打赏
  • 举报
回复
11楼 我试试你的这个建议
加载更多回复(10)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧