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