配置文件 <bean id="loginService" class="com.testPlatform.service.LoginService" scope="prototype"> <property name="userDao" ref="userDaoImp"/> </bean> <bean id="loginAction" class="com.testPlatform.action.LoginAction"> <property name="loginService" ref="loginService"/> </bean> 代码片段 public class LoginAction { private LoginService loginService; private Integer rtxID; private String password; public String loginValidate() { User user = loginService.loginValidate(rtxID, password); if( null == user ) { return "error"; } HttpServletRequest request = ServletActionContext.getRequest(); request.getSession().setAttribute("sessionuserinfo", user); return "success"; } public LoginService getLoginService() { return loginService; } public void setLoginService(LoginService loginService) { System.out.println("LoginService setter---------------------------"); this.loginService = loginService; } } 每次页面发起请求 来到函数loginValidate()时,发现loginService的值为null不知道为什么 以下是截取的 tomcat启动日志 2015-3-20 14:22:31 org.springframework.orm.hibernate3.HibernateTransactionManager afterPropertiesSet |
|
web.xml里面怎么配置的
|
|
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <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>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>/resource/product/login.jsp</welcome-file> </welcome-file-list> <session-config> <session-timeout>60</session-timeout> </session-config> </web-app> |
|
loginService为什么要配置成多例的,把scope=”prototype”去掉试试,单例和多例在初始化时间上可能不一致。
|
|
亲 你是在弄ssh项目把 首先你要确定你web 配置监听启动了你的spring 配置
你配置的service bean 把这个去掉 scope=”prototype” spring 创建的 service 是单利模式 struts创建的是非单利模式 你需要在你spring 管理的action bean 上加上 scope=”prototype” |
|
我的 web.xml发出来啦 在3楼 已经使用监听启动了spring的配置 <bean id="loginService" class="com.testPlatform.service.LoginService" > <property name="userDao" ref="userDaoImp"/> </bean> <bean id="loginAction" class="com.testPlatform.action.LoginAction" scope="prototype"> <property name="loginService" ref="loginService"/> </bean> |
|
去掉了 也不行噢~ |
|
是的 你修改成这样还有问题吗? |
|
你这样修改配置还是不行 那你确定你的struts 配置应用了你spring配置的action? |
|
把getter方法去掉试试
|
|
把struts配置给出来……..
|
|
struts配置: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts> <constant name = "struts.i18n.encoding" value="UTF-8"/> <package name ="login" extends="struts-default"> <action name="login" class="com.testPlatform.action.LoginAction" method="loginValidate"> <result name="error">/resource/login.jsp</result> <result name="success">/resource/main.jsp</result> </action> </package> </struts> |
|
就是空指针 |
|
第一 action中 loginService不应该有get方法
第二 配置文件中 你配置数据源了吗 <property name=”dataSource”> <ref bean=”dataSource”/> </property> |
|
Struts 配置文件有问题:
<struts>
<constant name = "struts.i18n.encoding" value="UTF-8"/>
<package name ="login" extends="struts-default">
<action name="login" class="com.testPlatform.action.LoginAction" method="loginValidate">
<result name="error">/resource/login.jsp</result>
<result name="success">/resource/main.jsp</result>
</action>
</package>
</struts>
com.testPlatform.action.LoginAction 改成 你 spring 里配置的 loginAction
<bean id="loginAction" class="com.testPlatform.action.LoginAction" scope="prototype">
<property name="loginService" ref="loginService"/>
</bean>
|
|
40分 |
struts 的action 配置 把class 换成 spring 配置的action 对应的id 修改后 你使用spring 来管理的你的action 所以对象有spring 帮助创建 直接引用spring 配置好的对象id即可 |
spring的配置得加个default-autowire=”byName”吧。
|
|
同意16楼,你既然要spring管理的bean,你应该在struts里面配置上
|
|
struts配置错误,要使用Spring里面配置的Struts id 才行
|
|
这个问题终于搞定。
1.将LoginAction的作用域 设置为prototype 感谢所有人的回答。 |