風雨無阻

          (轉)Struts Spring Hibernate 整合報空指針解決方法

          最近一直在弄WebWork,Struts都快忘了。今天又自己小試了一下SSH,結果每次都是報空指針異常,經過一番研究,發現,如果不把action的type改成

          org.springframework.web.struts.DelegatingActionProxy

          的話,就會報這個

          java.lang.NullPointerException

           com.test.struts.action.UserAction.show(UserAction.java:46)
          sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          java.lang.reflect.Method.invoke(Method.java:597)
          org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
          org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
          org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
          org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
          org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
          org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
          javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
          javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
          解決辦法:
          1.在struts-config.xml的action把type改成org.springframework.web.struts.DelegatingActionProxy,例如:
          <action attribute="userForm" input="/index.jsp" name="userForm"
                    parameter="param" path="/user" scope="request"
                    type="org.springframework.web.struts.DelegatingActionProxy"
                    validate="false">
                    <forward name="success" path="/success.jsp" />
          </action>
          2.在spring的配置文件(applicationContext.xml)里添加一些代碼:
          <bean id="transactionManager"
                   class="org.springframework.orm.hibernate3.HibernateTransactionManager">
                   <property name="sessionFactory">
                    <ref bean="sessionFactory" />
                   </property>
          </bean>
          給DAO加上代理
          <bean id="UserDAOIProxy"
                   class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
                   <property name="transactionManager">
                    <ref bean="transactionManager" />
                   </property>
                   <property name="target">
                    <ref bean="UserDao" />
                   </property>
                   <property name="transactionAttributes">
                    <props>
                     <prop key="create*">PROPAGATION_REQUIRED</prop>
                     <prop key="update*">PROPAGATION_REQUIRED</prop>
                     <prop key="delete*">PROPAGATION_REQUIRED</prop>
                     <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
                    </props>
                   </property>
          </bean>
          3.更改Service的引用
           <bean name="UserService"
                   class="com.test.service.impl.UserServiceImpl">
                   <property name="userDao">
                    <ref bean="
          UserDAOIProxy" />
                   </property>
          </bean>
          這樣就不會報那個異常了,測試通過^_^
          我的配置文件代碼:
          applicationContext.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
          <beans>
          <bean id="dataSource"
                   class="org.apache.commons.dbcp.BasicDataSource">
                   <property name="driverClassName"
                    value="oracle.jdbc.driver.OracleDriver">
                   </property>
                   <property name="url"
                    value="jdbc:oracle:thin:@192.192.192.19:1521:orcl">
                   </property>
                   <property name="username" value="sunyu"></property>
                   <property name="password" value="19830317"></property>
          </bean>
          <bean id="sessionFactory"
                   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
                   <property name="dataSource">
                    <ref bean="dataSource" />
                   </property>
                   <property name="hibernateProperties">
                    <props>
                     <prop key="hibernate.dialect">
                      org.hibernate.dialect.Oracle9Dialect
                     </prop>
                     <prop key="hibernate.show_sql">true</prop>
                    </props>
                   </property>
                   <property name="mappingResources">
                    <list>
                     <value>com/test/model/TestUser.hbm.xml</value>
                    </list>
                   </property>
          </bean>
          <bean id="transactionManager"
                   class="org.springframework.orm.hibernate3.HibernateTransactionManager">
                   <property name="sessionFactory">
                    <ref bean="sessionFactory" />
                   </property>
          </bean>
          <bean name="UserDao" class="com.test.dao.impl.UserDaoImpl">
                   <property name="sessionFactory">
                    <ref bean="sessionFactory" />
                   </property>
          </bean>
          <bean id="UserDAOIProxy"
                   class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
                   <property name="transactionManager">
                    <ref bean="transactionManager" />
                   </property>
                   <property name="target">
                    <ref bean="UserDao" />
                   </property>
                   <property name="transactionAttributes">
                    <props>
                     <prop key="create*">PROPAGATION_REQUIRED</prop>
                     <prop key="update*">PROPAGATION_REQUIRED</prop>
                     <prop key="delete*">PROPAGATION_REQUIRED</prop>
                     <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
                    </props>
                   </property>
          </bean>
          <bean name="UserService"
                   class="com.test.service.impl.UserServiceImpl">
                   <property name="userDao">
                    <ref bean="UserDAOIProxy" />
                   </property>
          </bean>
          <bean name="/user" class="com.test.struts.action.UserAction">
                   <property name="userService">
                    <ref bean="UserService" />
                   </property>
          </bean>
          </beans>
          struts-config.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "
          http://struts.apache.org/dtds/struts-config_1_2.dtd
          ">
          <struts-config>
          <data-sources />
          <form-beans>
                   <form-bean name="userForm" type="com.test.struts.form.UserForm" />
          </form-beans>
          <global-exceptions />
          <global-forwards />
          <action-mappings>
                   <action attribute="userForm" input="/index.jsp" name="userForm"
                    parameter="param" path="/user" scope="request"
                    type="org.springframework.web.struts.DelegatingActionProxy"
                    validate="false">
                    <forward name="success" path="/success.jsp" />
                   </action>
          </action-mappings>
          <message-resources parameter="com.test.struts.ApplicationResources" />
          <plug-in
                   className="org.springframework.web.struts.ContextLoaderPlugIn">
                   <set-property property="contextConfigLocation"
                    value="/WEB-INF/applicationContext.xml" />
          </plug-in>

          </struts-config>



          ------------------------------------------
          第二種方法,如果在struts-config.xml里面加上

          <controller>
          <set-property property="processorClass"
          value="org.springframework.web.struts.DelegatingRequestProcessor" />
          </controller>

          這樣action就不需要type屬性了
          ----------------------------------------------

          posted on 2008-04-03 19:14 秋楓故事 閱讀(2445) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2008年4月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          新聞檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 栾城县| 长沙市| 宕昌县| 隆回县| 项城市| 东台市| 宁津县| 麦盖提县| 恩施市| 山阴县| 尖扎县| 凌源市| 萨嘎县| 九江县| 且末县| 大洼县| 图片| 长泰县| 开封市| 雅安市| 义马市| 濮阳县| 利津县| 卫辉市| 克东县| 吕梁市| 临汾市| 平凉市| 株洲市| 东台市| 射洪县| 于都县| 贺兰县| 高密市| 普兰县| 林西县| 新乡市| 雷山县| 崇信县| 伊宁市| 滦平县|