读书人

spring 流入失败!

发布时间: 2012-11-08 08:48:12 作者: rapoo

spring 注入失败!!!!!!!!
applicationContext.xml

XML code
<bean id="userDao" class="com.quxiuna.dao.impl.UserDaoImpl">        <property name="sessionFactory">            <ref local="sessionFactory" />        </property>    </bean>    <bean id="userService" class="com.quxiuna.service.impl.UserServiceImpl">        <property name="userDao">            <ref local="userDao" />        </property>    </bean>    <bean id="loginAction" class="com.quxiuna.struts.action.login.LoginAction" scope="prototype">        <property name="userService">            <ref local="userService" />        </property>    </bean>

struts.xml
XML code
<struts>    <constant name="struts.objectFactory" value="spring" />    <constant name="struts.devMode" value="true" />    <constant name="struts.objectFactory.spring.autoWire" value="type" />    <include file="struts-default.xml"/>    <include file="com/quxiuna/struts/action/login/loginAction.xml" /></struts> 

loginAction.xml
XML code
<struts>         <package name="login" extends="struts-default" namespace="/login">             <action name="loginAction" class="com.quxiuna.struts.action.login.LoginAction">                 <result name="success">/sendSuccss.jsp</result>         </action>      </package></struts> 

web.xml
XML code
     <context-param>       <param-name>contextConfigLocation</param-name>       <param-value>           /WEB-INF/applicationContext*.xml       </param-value>    </context-param>    <listener>                 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>

UserServiceImpl.java
Java code
public class UserServiceImpl implements UserService {    public UserDAO userDao;    public UserDAO getUserDao() {        return userDao;    }    public void setUserDao(UserDAO userDao) {        this.userDao = userDao;    }


Java code
package com.quxiuna.struts.action.login;import java.util.Map;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import com.quxiuna.hibernate.po.RbacUser;import com.quxiuna.service.UserService;import com.quxiuna.util.Constants;public class LoginAction extends ActionSupport {        private static final long serialVersionUID = -1640288447822607013L;        private String name;    private String password;    private String message;    public UserService userService;    public String getName() {        return name;    }            public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }        @SuppressWarnings("unchecked")    public String execute() {        RbacUser user = userService.login(name, password);        if (user != null) {            ActionContext ctx = ActionContext.getContext();             Map session = ctx.getSession();             session.put(Constants.SESSSION_NAME, name);            return SUCCESS;        } else {            message = "用户名或密码错误!";             return ERROR;        }    }    public String getMessage() {        return message;    }    public void setMessage(String message) {        this.message = message;    }    public UserService getUserService() {        return userService;    }    public void setUserService(UserService userService) {        this.userService = userService;    }} 



报错
java.lang.NullPointerException
com.quxiuna.struts.action.login.LoginAction.execute(LoginAction.java:38)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)
…………………………………………
…………………………………………

[解决办法]
<action name="loginAction" class="com.quxiuna.struts.action.login.LoginAction">

改下:

<action name="loginAction" class="loginAction">
[解决办法]
探讨

我怀疑是spring的配置文件没有加载

工程结构图如下

[解决办法]
如果把Action给spring管理
web.xml里的Action的class=“spring里配置的Action的name”
[解决办法]
用注解方式注入就没这么多麻烦事了
[解决办法]
applicationContext.xml把这个spring的配置文件与web.xml同一目录下试试
[解决办法]
<constant name="struts.objectFactory" value="spring" />
这就话说明你把action交给spring管理了,
<action name="loginAction" class="com.quxiuna.struts.action.login.LoginAction">
这句话的意思是让struts去管理action,这样就矛盾了,
<bean id="loginAction" class="com.quxiuna.struts.action.login.LoginAction" scope="prototype">
这句话又是让spring管理action,又矛盾了
应该改成:
<action name="loginAction" class="LoginAction">
其他不变~~~

[解决办法]
CSS code
<bean id="loginAction" class="com.quxiuna.struts.action.login.LoginAction" scope="prototype">        <property name="userService">            <ref local="userService" />        </property>    </bean>上面的id 建议换成name="/loginAction" 和下面的struts中的action的path对应<struts>            <package name="login" extends="struts-default" namespace="/login">                <action name="loginAction" class="com.quxiuna.struts.action.login.LoginAction"> 这里的class不要。通过spring注入不需要class,已经和上面的bean对应了。                   <result name="success">/sendSuccss.jsp </result>            </action>        </package></struts>
[解决办法]
探讨
CSS code

<bean id="loginAction" class="com.quxiuna.struts.action.login.LoginAction" scope="prototype">
<property name="userService">
<ref local="userService" />
</pro……

[解决办法]
写一个junit先把DAO测通,再测service层,这个别人帮不了你,因为我们工具上没有你的项目环境.还得靠你自己.

读书人网 >Java Web开发

热点推荐