在SSH2框架集成中,Bean的注入获得的是null,同时this.HibernateTemplate()同样也是获得null。大家帮忙谢 10
意思是sessionFactory和一般的bean都没有注入成功:applicationContext-dao.xml的配置如下:<beanid="memberDao"c...
意思是sessionFactory和一般的bean都没有注入成功:
applicationContext-dao.xml的配置如下:
<bean id="memberDao" class="net.helay.kledu.dao.MemberDao" scope="prototype">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
applicationContext-service.xml的配置:
<bean id="memberService" class="net.helay.kledu.service.MemberService" scope="prototype">
<property name="memberIDao" ref="memberDao"></property>
</bean>
applicationContext-action.xml的配置
<bean name="*Member" class="net.helay.kledu.control.MemberAction" scope="prototype">
<property name="memberIService" ref="memberService"/>
</bean>
struts2.xml中配置
<action name="*Member" class="net.helay.kledu.control.MemberAction" method="{1}" >
<result name="false" >/index.jsp</result>
<result name="true">/main.jsp</result> </action>
hibernate.cfg.xml的配置
<session-factory>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.username">helay</property>
<property name="hibernate.connection.password">helay</property>
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="net/helay/kledu/bean/Member.hbm.xml"/>
</session-factory>
web.xml的配置如下
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置Spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext*.xml</param-value>
</context-param>
<!-- 配置Spring的接听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
备注:IDao是Dao所实现的接口,IService也是Service类所实现的接口。在MemberService定义IDao,Spring的Service对应的bean中将Dao注入到IDao,Action中也同理。
上面的applicationContext-dao.xml中省去了事物管理的部分。
谢谢个人对我的问题的热心帮助,这个问题我自己搞定了。谢谢你们。 展开
applicationContext-dao.xml的配置如下:
<bean id="memberDao" class="net.helay.kledu.dao.MemberDao" scope="prototype">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
applicationContext-service.xml的配置:
<bean id="memberService" class="net.helay.kledu.service.MemberService" scope="prototype">
<property name="memberIDao" ref="memberDao"></property>
</bean>
applicationContext-action.xml的配置
<bean name="*Member" class="net.helay.kledu.control.MemberAction" scope="prototype">
<property name="memberIService" ref="memberService"/>
</bean>
struts2.xml中配置
<action name="*Member" class="net.helay.kledu.control.MemberAction" method="{1}" >
<result name="false" >/index.jsp</result>
<result name="true">/main.jsp</result> </action>
hibernate.cfg.xml的配置
<session-factory>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.username">helay</property>
<property name="hibernate.connection.password">helay</property>
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="net/helay/kledu/bean/Member.hbm.xml"/>
</session-factory>
web.xml的配置如下
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置Spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext*.xml</param-value>
</context-param>
<!-- 配置Spring的接听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
备注:IDao是Dao所实现的接口,IService也是Service类所实现的接口。在MemberService定义IDao,Spring的Service对应的bean中将Dao注入到IDao,Action中也同理。
上面的applicationContext-dao.xml中省去了事物管理的部分。
谢谢个人对我的问题的热心帮助,这个问题我自己搞定了。谢谢你们。 展开
6个回答
展开全部
因为你的HibernateTemplate()在 Dao中,
你的 IDa o继承了 Dao,
而sessionfactory只是注入到Dao中,
当你的Service调用的时候用的是Dao=new IDao,
你要在Service中要告诉Dao你实际调用的是哪个IDao
所以你这么写是不对的,照你的写法,有两种改法,
第一种: 父类Dao不要在配置文件中 申明, 由Service层注入
<bean id="memberIDao" class="net.helay.kledu.dao.MemberIDao" scope="prototype">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="memberIService" class="net.helay.kledu.service.MemberIService" scope="prototype">
<property name="memberIDao" ref="memberIDao"></property>
<property name="Dao" ref="memberIDao"></property>
</bean>
第二种: 不在service配置文件中注入父类的Dao,在IServiceImpl.java中
setMemberIDao(MemberIDao memberIDao){
this.memberIDao=memberIDao;
super.setDao(memberIDao);
}
你的 IDa o继承了 Dao,
而sessionfactory只是注入到Dao中,
当你的Service调用的时候用的是Dao=new IDao,
你要在Service中要告诉Dao你实际调用的是哪个IDao
所以你这么写是不对的,照你的写法,有两种改法,
第一种: 父类Dao不要在配置文件中 申明, 由Service层注入
<bean id="memberIDao" class="net.helay.kledu.dao.MemberIDao" scope="prototype">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="memberIService" class="net.helay.kledu.service.MemberIService" scope="prototype">
<property name="memberIDao" ref="memberIDao"></property>
<property name="Dao" ref="memberIDao"></property>
</bean>
第二种: 不在service配置文件中注入父类的Dao,在IServiceImpl.java中
setMemberIDao(MemberIDao memberIDao){
this.memberIDao=memberIDao;
super.setDao(memberIDao);
}
追问
我的Dao是实现IDao接口的。不过你提过的方法我可以去试试。谢谢你的关注。
展开全部
那个,不好意思,既然解决的话,把解决方案能否公布一下,百度就他妈的一堆问题,答案没几个
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的:hibernate.cfg.xml文件是放哪儿的?放classes目录下
更多追问追答
追问
src下面的。struts.xml ,applicationContext-dao.xml,applicationContext-service.xml,applicactionContext-action.xml 和hibernate.cfg.xml都是在src下面放的。
追答
启动时有spring的加载信息吗?
classpath:hibernate.cfg.xml
改成
classpath*:hibernate.cfg.xml试试。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
spring帮你注入,但是你需要提供set方法才行
例如:你注入了
private TestService testService;
public void setTestService(TestService testService) {
this.testService = testService;
}
如果没有set方法,在用到testService时,testService=null,一旦调用testService里的方法时
会报空指针异常的
例如:你注入了
private TestService testService;
public void setTestService(TestService testService) {
this.testService = testService;
}
如果没有set方法,在用到testService时,testService=null,一旦调用testService里的方法时
会报空指针异常的
追问
我都提供了getter和setter方法了的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
struts2.xml中配置
<action name="*Member" class="net.helay.kledu.control.MemberAction" method="{1}" >
<result name="false" >/index.jsp</result>
<result name="true">/main.jsp</result> </action>
class配错了,应该和Spring中的对应估计你的应该叫memberAction
<action name="*Member" class="net.helay.kledu.control.MemberAction" method="{1}" >
<result name="false" >/index.jsp</result>
<result name="true">/main.jsp</result> </action>
class配错了,应该和Spring中的对应估计你的应该叫memberAction
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在session-factory的bean中没有配置你说的bean的*.hbm.xml,例如你有个user类,一定会有user.hbm.xml,你就没配置它
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询