最近搞了个MyEclipse8,据说支持struts2,盛名之下决定试试,结果……
    唉,先上代码!
web.xml <context-param>
<param-name>webAppRootKey</param-name>
<param-value>newpro.root</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:applicationContext-*.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>struts.xml<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
 "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.objectFactory.spring.autoWire" value="type" />
<constant name="struts.objectFactory" value="spring" />
<include file="struts-default.xml" />
<package name="comnewpro.web" extends="struts-default">
<action name="login" class="loginAction">
<result name="success">/success.jsp</result>
<result name="failure">/index.jsp</result>
<result name="login.success">/index.jsp</result>
</action>
</package>
</struts>applicationContext.xml <bean id="loginAction" class="com.newpro.web.LoginAction" scope="request">
</bean>
其他省略……
    问题就出在红色的部分,如果直接写com.newpro.web.LoginAction可以执行,否则就出错
exceptionUnable to instantiate Action, loginAction,  defined for 'login' in namespace '/'loginAction
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.FilterDispatcher.doFilter(FilterDispatcher.java:395)root causejava.lang.ClassNotFoundException: loginAction
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1484)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1329)
com.opensymphony.xwork2.util.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:146)
com.opensymphony.xwork2.ObjectFactory.getClassInstance(ObjectFactory.java:96)
com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectFactory.java:212)
com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:132)
com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:139)
com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:109)
com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:288)
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.FilterDispatcher.doFilter(FilterDispatcher.java:395)    感觉就是spring没能给struts2创建出action来,不知道错哪了,弄了一天其他的问题一大堆,后来发现都是包有冲突,不知道这次是不是又有哪个冲突了,各位给看看吧!

解决方案 »

  1.   

    晕,怎么在代码里加颜色不管用的么?
    是把struts.xml中<action name="login" class="loginAction">换成<action name="login" class="com.newpro.web.LoginAction">就一切正常,想交给spring就不行
      

  2.   

    struts.xml的action配置做相应修改:
    <action name="自定义action名" class="loginAction">
      

  3.   

    struts2-spring-plugin-2.1.8.1.jar
      

  4.   

    楼主一定对struts2加spring的配置不熟,依赖上了IDE的自动辅助功能出了问题,更不知所错。
    所以建议楼主先老老实实用eclipse自己手动编写配置文件,熟悉一下配置。
    IDE的强大果然掩盖了很多基础问题。
      

  5.   

    <action name="login" class="com.newpro.web.LoginAction">
    不应该是楼上包的问题吧
      

  6.   

    晕, 你得让spring去管理请求路径啊.
      这样 在struts中type设置为如下
         <action path="/user"
         type="org.springframework.web.struts.DelegatingActionProxy"
         name="userForm"
         scope="request"
         parameter="method"
         >
         <forward name="list" path="/user/list.jsp" />
         <forward name="gotoregister" path="/user/register.jsp" />
         </action>而在spring配置中, 
    <bean name="/user" class="cn.wang.usermanager.actions.UserAction">
    <property name="userManager" ref="userManager"/>
    </bean>
    记住, name属性值要与struts的path属性值相同
      

  7.   

    <constant name="struts.objectFactory.spring.autoWire" value="type" />
        <constant name="struts.objectFactory" value="spring" />
    这个没必要啦struts2-spring-plugin-2.1.8.1.jar 加上
    测试下  <bean id="loginAction" class="com.newpro.web.LoginAction" scope="request">
        </bean>是否成功交给spring的ioc啦
      

  8.   

        <bean id="loginAction" class="com.newpro.web.LoginAction" scope="prototype">
        </bean>
      

  9.   

    现在就是这样写的啊!
    这个包已经在了啊
    感觉就是包的问题,不过不知道哪些有冲突,就是想试试MyEclipse到底有什么问题
    那两句不需要的话怎么告诉struts2它的action从spring查找?
    scope="request"和scope="prototype"都加试过了,没好使
      

  10.   

    找到问题了,晕死!
    web.xml中的contextConfigLocation路径写错了……<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    classpath*:applicationContext-*.xml
    </param-value>
    </context-param>而我的配置文件叫applicationContext.xml
      

  11.   

    applicationContext.xml要放在WEB-INF下不然struts找不到
    目前我也不知道struts是在哪设置连接applicationContext.xml路径的
    哪位大侠知道麻烦告诉下