Spring整合Struts 注入失败,提交第二回了,吭我一百财富值了
<!--Spring中配置Action--><beanid="loginAction"class="com.action.LoginAction"scope="proto...
<!-- Spring中配置Action -->
<bean id="loginAction" class="com.action.LoginAction" scope="prototype">
<property name="userService">
<ref bean="userService" />
</property>
</bean>
在Struts.xml中的配置:
<constant name="struts.objectFactory" value="spring" />
<package name="mypackage" extends="struts-default" namespace="/">
<action name="testLogin" class="com.action.LoginAction" method="testLogin">
<result name="success">welcome.jsp</result>
<result name="error">index.jsp</result>
</action>
</package>
这样完全没有任何问题,只要改成:
<action name="testLogin" class="loginAction" method="testLogin">
<result name="welcome">welcome.jsp</result>
<result name="success">welcome.jsp</result>
<result name="error">index.jsp</result>
</action>
立马出现:
Unable to instantiate Action, loginAction, defined for 'testLogin' in namespace '/'loginAction
以及
java.lang.ClassNotFoundException: loginAction
本人猜测:只有两种可能,一就是Spring在这里的这个bean并没有注入,Spring注入的是接口,参照的是实现类。在这里不同的是这个Action是这个实现类。因此在Spring文件开头,加入了:
proxy-target-class="true"></aop:config>
告诉Spring实现类的bean也可以注入了。但是仍然解决不了异常的问题。
二就是路径,或者命名空间namespace 哪里出了问题,求高手指教,都晚上三点了,还没搞对。若能有详细的解释,不胜感激,网上其它的回答看了几十篇了,没有可行的。
再就是除非使用的包不兼容!~~版本不兼容的问题小弟没有太深究。 若有人成功实现上述要求,求你的JAR包。最好能告诉我分别来自哪框架的哪个版本,分开打包过来。QQ:330157550 也欢迎加好友,求指教。谢谢 展开
<bean id="loginAction" class="com.action.LoginAction" scope="prototype">
<property name="userService">
<ref bean="userService" />
</property>
</bean>
在Struts.xml中的配置:
<constant name="struts.objectFactory" value="spring" />
<package name="mypackage" extends="struts-default" namespace="/">
<action name="testLogin" class="com.action.LoginAction" method="testLogin">
<result name="success">welcome.jsp</result>
<result name="error">index.jsp</result>
</action>
</package>
这样完全没有任何问题,只要改成:
<action name="testLogin" class="loginAction" method="testLogin">
<result name="welcome">welcome.jsp</result>
<result name="success">welcome.jsp</result>
<result name="error">index.jsp</result>
</action>
立马出现:
Unable to instantiate Action, loginAction, defined for 'testLogin' in namespace '/'loginAction
以及
java.lang.ClassNotFoundException: loginAction
本人猜测:只有两种可能,一就是Spring在这里的这个bean并没有注入,Spring注入的是接口,参照的是实现类。在这里不同的是这个Action是这个实现类。因此在Spring文件开头,加入了:
proxy-target-class="true"></aop:config>
告诉Spring实现类的bean也可以注入了。但是仍然解决不了异常的问题。
二就是路径,或者命名空间namespace 哪里出了问题,求高手指教,都晚上三点了,还没搞对。若能有详细的解释,不胜感激,网上其它的回答看了几十篇了,没有可行的。
再就是除非使用的包不兼容!~~版本不兼容的问题小弟没有太深究。 若有人成功实现上述要求,求你的JAR包。最好能告诉我分别来自哪框架的哪个版本,分开打包过来。QQ:330157550 也欢迎加好友,求指教。谢谢 展开
6个回答
展开全部
从异常上看“java.lang.ClassNotFoundException: loginAction “,你的object容器依然使用的是strutsObjectFactory,而不是spring,因为strutsObjectFactory在实例化这个action时,会把loginAction当成了类全路径,而不是一个beanName;如果是spring的objectFactory的话,则会把他当成一个beanName,就不会抛这个异常了。
你的这个配置似乎没有起作用:
<constant name="struts.objectFactory" value="spring" />
不好意思,只能分析到这里了。
你的这个配置似乎没有起作用:
<constant name="struts.objectFactory" value="spring" />
不好意思,只能分析到这里了。
追问
你和我想的一样,首先是Struts的容器分析了这个Action,当找到class="beanName" 时,此时应该交由Sping的BeanFactory去创建这个LoginAction类的实例,而不是由Struts2框架来创建,当找到这个beanName时,然后去关联解析class = com.action.LoginAction ,分析完成后,交给Struts,此时Struts.xml中的Action就不会再报找不到匹配类的问题了。 然后再去找相应method执行action对应的方法,再映射页面。可就是不按这逻辑来啊
展开全部
不放在包中,action找不到。
更多追问追答
追问
welcome.jsp
index.jsp
class 替换成 Spring 中注入的bean loginAction 就出错,问题在注入上
追答
如果是我,我就把name也用loginAction,然后method用一个别的不带Login的名字。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你在com.action.LoginAction加入@Controller("loginAction")了么?
追问
么有使用注解,如果在Action类中加了注解,好像就不用在Spring的配置文件applicationContext.xml 配置这个Action的Bean了吧?
追答
不好意思没帮到忙,我也不清楚了,一直觉得struts的配置和spring的配置没什么关系
注解和配置可以共存吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
<constant name="struts.objectFactory" value="spring" />
<package name="mypackage" extends="struts-default" namespace="/">
struts配置文件中:
<action name="testLogin" class="loginAction" method="testLogin">
<result name="success">welcome.jsp</result>
<result name="error">index.jsp</result>
</action>
</package>
class是什么东西啊。。。。
你换成type="com.action.LoginAction"
<ref bean="userService" />这里没有问题吧。。
把代码贴出来看一下。
<package name="mypackage" extends="struts-default" namespace="/">
struts配置文件中:
<action name="testLogin" class="loginAction" method="testLogin">
<result name="success">welcome.jsp</result>
<result name="error">index.jsp</result>
</action>
</package>
class是什么东西啊。。。。
你换成type="com.action.LoginAction"
<ref bean="userService" />这里没有问题吧。。
把代码贴出来看一下。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
加了struts2-spring-plugin.jar插件包吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
<action name="testLogin" class="loginAction" method="testLogin">
class="loginAction" 这里要写类的全名,
按照你的想法,在Spring里配一个实现类,然后用Struts里的配置去引用,这明显行不通。。
class="loginAction" 这里要写类的全名,
按照你的想法,在Spring里配一个实现类,然后用Struts里的配置去引用,这明显行不通。。
追问
我就是想在class这里引用配置的bean,而不是由Struts去生成对象。Spring集成Struts本来就是这么做的。把相应Action类的的实例的生成权以及生命周期维护等交给Spring去管理。经过三天的折腾现在已经搞定了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询