最近使用struts2+spring3+hibernate3.3做练习测试,引入jpa生成Dao,最后用Action调用dao的时候显示null,请朋友们帮忙啊代码如下:
applicationContext.xml:
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="sshPU" />
</bean>
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" /><bean
id="BsTAssessUpdeventDAO"
class="com.tanyao.ibm.daoImp.BsTAssessUpdeventDAO">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<bean id="BsTAssessEquipmentDAO"
class="com.tanyao.ibm.daoImp.BsTAssessEquipmentDAO">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<bean id="BsTAssessJichengshangDAO"
class="com.tanyao.ibm.daoImp.BsTAssessJichengshangDAO">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<bean id="BsTAssessActDAO"
class="com.tanyao.ibm.daoImp.BsTAssessActDAO">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
</beans>
Action:public class Demo2Action extends ActionSupport implements ServletRequestAware{
private BsTAssessActDAO bstassessactdao;
private IBsTAssessActDAO ibstassessactdao;
private BsTAssessAct bstassessact;
public String demo1()
{
bstassessact = bstassessactdao.findById("402880ee3122d803013122d92c80002d");
System.out.println(ibstassessactdao+"输出的内容是月份:"+bstassessact.getMonth());
return SUCCESS;
} public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
} /**
* @return the bstassessactdao
*/
public BsTAssessActDAO getBstassessactdao() {
return bstassessactdao;
} /**
* @param bstassessactdao the bstassessactdao to set
*/
public void setBstassessactdao(BsTAssessActDAO bstassessactdao) {
this.bstassessactdao = bstassessactdao;
} /**
* @return the bstassessact
*/
public BsTAssessAct getBstassessact() {
return bstassessact;
} /**
* @param bstassessact the bstassessact to set
*/
public void setBstassessact(BsTAssessAct bstassessact) {
this.bstassessact = bstassessact;
} /**
* @return the ibstassessactdao
*/
public IBsTAssessActDAO getIbstassessactdao() {
return ibstassessactdao;
} /**
* @param ibstassessactdao the ibstassessactdao to set
*/
public void setIbstassessactdao(IBsTAssessActDAO ibstassessactdao) {
this.ibstassessactdao = ibstassessactdao;
}
}调用dao的时候后台不报bug,前台jsp界面直接显示NullPointException,代码指向action的dao,我调试debug发现dao为空,请朋友们帮忙看看,如何实现spring注入hibernate,然后调用到的~
applicationContext.xml:
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="sshPU" />
</bean>
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" /><bean
id="BsTAssessUpdeventDAO"
class="com.tanyao.ibm.daoImp.BsTAssessUpdeventDAO">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<bean id="BsTAssessEquipmentDAO"
class="com.tanyao.ibm.daoImp.BsTAssessEquipmentDAO">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<bean id="BsTAssessJichengshangDAO"
class="com.tanyao.ibm.daoImp.BsTAssessJichengshangDAO">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<bean id="BsTAssessActDAO"
class="com.tanyao.ibm.daoImp.BsTAssessActDAO">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
</beans>
Action:public class Demo2Action extends ActionSupport implements ServletRequestAware{
private BsTAssessActDAO bstassessactdao;
private IBsTAssessActDAO ibstassessactdao;
private BsTAssessAct bstassessact;
public String demo1()
{
bstassessact = bstassessactdao.findById("402880ee3122d803013122d92c80002d");
System.out.println(ibstassessactdao+"输出的内容是月份:"+bstassessact.getMonth());
return SUCCESS;
} public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
} /**
* @return the bstassessactdao
*/
public BsTAssessActDAO getBstassessactdao() {
return bstassessactdao;
} /**
* @param bstassessactdao the bstassessactdao to set
*/
public void setBstassessactdao(BsTAssessActDAO bstassessactdao) {
this.bstassessactdao = bstassessactdao;
} /**
* @return the bstassessact
*/
public BsTAssessAct getBstassessact() {
return bstassessact;
} /**
* @param bstassessact the bstassessact to set
*/
public void setBstassessact(BsTAssessAct bstassessact) {
this.bstassessact = bstassessact;
} /**
* @return the ibstassessactdao
*/
public IBsTAssessActDAO getIbstassessactdao() {
return ibstassessactdao;
} /**
* @param ibstassessactdao the ibstassessactdao to set
*/
public void setIbstassessactdao(IBsTAssessActDAO ibstassessactdao) {
this.ibstassessactdao = ibstassessactdao;
}
}调用dao的时候后台不报bug,前台jsp界面直接显示NullPointException,代码指向action的dao,我调试debug发现dao为空,请朋友们帮忙看看,如何实现spring注入hibernate,然后调用到的~
解决方案 »
- 用A系统的账号登录B系统,用什么技术实现,求助。
- 请问一下,怎么删除struts2所输出的空行?
- spring json传递出错,请教!
- 关于使用spring validator from 中select 标签的问题
- 新人手问:请问现在公司做J2EE项目时用EJB做实体层还是Hibernate
- java初学者 怎么学习 jdom啊 急!
- 在线求救!在线求救!在线求救!在线求救!参与者就给分。
- 70分啊,急,JSP+Javamail群发邮件问题
- 修改完EJB之后,在发布上去为什么出错哇!!!
- 华立科技这个公司怎么样?值得去吗?我想听听大家的评价!
- spring 单例对象中的变量 与 静态变量
- MyEclipse的System.out.println出现乱码
例如:
public class BaseDAOImpl<T> extends HibernateDaoSupport implements BaseDAO<T> {现在我倒认为你的配置文件有问题,有点乱,没仔细看,你再试试
大概出现这问题的原因
1.你的配置和你在action对应的dao不一样,(很可能是你配置首写的是大写,在action却是小写),
2.你在action没有有dao的get.set方法
3.这是不可饶恕的,你的配置了问题。
最后送你一句话:以后认真点。
类没有继承hibernateDaoSupport 而是JpaDaoSupport public class BsTAssessActDAO extends JpaDaoSupport implements IBsTAssessActDAO {}
我只有action、model、dao、daoimpl目录,我现在想在action中掉用spring注入的dao文件,查询一条数据,现在显示dao为null,get/set方法已经生成了applicationContext。xml的配置为: <bean id="BsTAssessActDAO"
class="com.tanyao.ibm.daoImp.BsTAssessActDAO">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<bean id="demo2Action" class="com.tanyao.ibm.action.Demo2Action" >
<property name="bstassessactdao" ref="BsTAssessActDAO" />
</bean>Action调用代码为:private BsTAssessActDAO bstassessactdao;
private BsTAssessAct bstassessact;
public String demo1()(省略get,set方法,代码较多)
{
bstassessact = bstassessactdao.findById("402880ee3122d803013122d92c80002d");
System.out.println("输出的内容是月份:"+bstassessact.getMonth());
return SUCCESS;
}
是不是我少写代码了,spring注入的关键是什么,bean文件的id要和action中的dao名称一致吗?
类没有继承hibernateDaoSupport 而是JpaDaoSupport public class BsTAssessActDAO extends JpaDaoSupport implements IBsTAssessActDAO {}
我只有action、model、dao、daoimpl目录,我现在想在action中掉用spring注入的dao文件,查询一条数据,现在显示dao为null,get/set方法已经生成了applicationContext。xml的配置为: <bean id="BsTAssessActDAO"
class="com.tanyao.ibm.daoImp.BsTAssessActDAO">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<bean id="demo2Action" class="com.tanyao.ibm.action.Demo2Action" >
<property name="bstassessactdao" ref="BsTAssessActDAO" />
</bean>Action调用代码为:private BsTAssessActDAO bstassessactdao;
private BsTAssessAct bstassessact;
public String demo1()(省略get,set方法,代码较多)
{
bstassessact = bstassessactdao.findById("402880ee3122d803013122d92c80002d");
System.out.println("输出的内容是月份:"+bstassessact.getMonth());
return SUCCESS;
}
是不是我少写代码了,spring注入的关键是什么,bean文件的id要和action中的dao名称一致吗?
观看你上面的你好像是用了2层。一个是表示层,一个是数据访问层,却没有业务逻辑层。
给你点建议
1.BsTAssessActDAO尽量全部是bsTAssessActDAO,别有时大写有时小写。
2.命名规范。
<bean id="BsTAssessActDAO" class="com.tanyao.ibm.daoImp.BsTAssessActDAO">
上面是你写的,这是你的dao的实现层吗?如果是,类名这样BsTAssessActDAOImpl,
3.逻辑清晰。既然你用了spring为什么你的配置是上面的这样我有点疑问,
中bean的id和action中get,set的id要一模一样,百度上什么在applicationContext.xml中配置action,添加atuowire参数都扯淡的解决了,感谢各位……