强烈建议楼主把Spring的配置分开,分别负责不同的配置信息。比如分为:applicationContext.xml(负责配置数据源,Hibernate的映射文件等), actionContext.xml(负责action的注入), daoContext.xml(负责DAO的注入), serviceContext.xml(负责Spring的事务代理等)
这样后期维护方便,也很好扩展

解决方案 »

  1.   

    java.lang.NullPointerException
    at org.xy.sshdemo.struts.action.UserAction.register(UserAction.java:57)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
    at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
    at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:866)
    at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:716)
    at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1498)
    at java.lang.Thread.run(Thread.java:595)
      

  2.   

    你的dao没有注入到你的action里面吧!!
      

  3.   

    你的dao没有注入到你的action里面吧!!
    ========================
    如何将dao注入到action里啊?
      

  4.   

      <action 
          attribute="userForm" 
          input="/jsp/errors.jsp" 
          name="userForm" 
          path="/user" 
          scope="request" 
          parameter="status" 
          type="org.xy.sshdemo.struts.action.UserAction" >        <forward name="suc" path="/jsp/main.jsp" > </forward > 
           <forward name="fal" path="/jsp/errors.jsp" > </forward > 
           <forward name="xx" path="/jsp/xx.jsp" > </forward >
    改为
      <action 
          attribute="userForm" 
          input="/jsp/errors.jsp" 
          name="userForm" 
          path="/user" 
          scope="request" 
          parameter="status" 
          type="org.springframework.web.struts.DelegatingActionProxy" > 
           <forward name="suc" path="/jsp/main.jsp" > </forward > 
           <forward name="fal" path="/jsp/errors.jsp" > </forward > 
           <forward name="xx" path="/jsp/xx.jsp" > </forward >同时在spring中
    加入:<beans>
    <bean name="/user" class="org.xy.sshdemo.struts.action.UserAction"></bean></beans>
      

  5.   

    sprint+struts步骤:
     1.需要有 Struts 包和 Spring 的 core, aop, web 三个包
     2. 对 Struts 配置文件做修改加入 Spring 托管功能.
    创建 Spring 配置文件,将文件放到src 目录下,文件名称为 applicationContext.xml, 编译后放到 WEB-INF/classes/ 下.
    配置struts-config.xml文件,添加 spring的插件, 位置在 struts-config 文件的最末尾.
    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" />
    </plug-in>
    3. 修改 Struts 的 struts-config.xml 中的Action配置
    <action  
          attribute="userForm"  
          input="/jsp/errors.jsp"  
          name="userForm"  
          path="/user"  
          scope="request"  
          parameter="status"  
          type="org.xy.sshdemo.struts.action.UserAction"  >         <forward name="suc" path="/jsp/main.jsp"  >  </forward  >  
            <forward name="fal" path="/jsp/errors.jsp"  >  </forward  >  
            <forward name="xx" path="/jsp/xx.jsp"  >  </forward  > 
    改为 
       <action  
          attribute="userForm"  
          input="/jsp/errors.jsp"  
          name="userForm"  
          path="/user"  
          scope="request"  
          parameter="status"  
          type="org.springframework.web.struts.DelegatingActionProxy"  >  
            <forward name="suc" path="/jsp/main.jsp"  >  </forward  >  
            <forward name="fal" path="/jsp/errors.jsp"  >  </forward  >  
            <forward name="xx" path="/jsp/xx.jsp"  >  </forward  > 4. 配置spring 来实例化上一步中被删除的 Action 类.<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans>
    <bean name="/login" class="com.test.struts.action.LoginAction"></bean></beans>Spring 通过 org.springframework.web.struts.DelegatingActionProxy 这个类, 然后根据 Struts 配置文件中的 <action path="/login" ..> 和 Spring 配置文件中的 <bean name="/login" ..> 来将 Spring 管理下的 Struts Action 类和提交的路径匹配起来, 这些就是关于转交控制权的配置内容.实践的过程中发现必须把 singleton="false"去掉才行, 否则就会无法初始化 Spring 框架, 不知道具体的原因是什么.