struts2+spring+hibernate数据库操作报空指针

xycshh 2009-09-20 06:40:47
写了一个action,运行的时候老是报空指针,把数据库操作的语句删掉就正常了,其他的地方的数据库操作室正常的,郁闷了,不知道什么原因。哪位朋友有遇到类似的问题,怎么解决的。
action代码:
public class OrderManager {
private IOrderSerivce OSerivce;
private IProductSerivce PSerivce;

public IOrderSerivce getOSerivce() {
return OSerivce;
}



public void setOSerivce(IOrderSerivce serivce) {
OSerivce = serivce;
}



public IProductSerivce getPSerivce() {
return PSerivce;
}



public void setPSerivce(IProductSerivce serivce) {
PSerivce = serivce;
}


@SuppressWarnings("unchecked")
public String execute()throws Exception{
Orders order=new Orders();
User u=(User)ActionContext.getContext().getSession().get("user");
order.setUserid(u.getId());
Date date = new Date();
Timestamp ts = new Timestamp(date.getTime());
order.setDealdate(ts);
Set<Orderitem> orderitemSet = new HashSet();
ShopCart cart=(ShopCart)ActionContext.getContext().getSession().get("cart");
Collection<Product> items=cart.getHashMap().values();
Iterator<Product> it=items.iterator();
double totalprice=0.00;
while(it.hasNext()){
Product p=it.next();
totalprice+=p.getPrice();
p.setNumber(p.getNumber()-p.getQuantity());
this.getPSerivce().update(p);//数据库操作
Orderitem item=new Orderitem();
item.setNumber(p.getQuantity());
item.setProductid(p.getId());
item.setOrder(order);
orderitemSet.add(item);
}
order.setTotalprice(totalprice);
order.setOrderitem(orderitemSet);//数据库操作
this.getOSerivce().saveOrders(order);
cart.clear();

return "success";
}
}
spring 配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf-8"></property>
<property name="username" value="root"></property>
<property name="password" value="870227"></property>
<property name="maxActive" value="100"></property>
<property name="maxIdle" value="30"></property>
<property name="maxWait" value="500"></property>
<property name="defaultAutoCommit" value="true"></property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/shop/bean/Comments.hbm.xml</value>
<value>com/shop/bean/Orderitem.hbm.xml</value>
<value>com/shop/bean/Product.hbm.xml</value>
<value>com/shop/bean/User.hbm.xml</value>
<value>com/shop/bean/Orders.hbm.xml</value>
</list>
</property>
</bean>
<bean id="txmanager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
<property name="transactionManager" ref="txmanager"/>
<property name="transactionAttributes">
<!-- 下面定义事务传播属性-->
<props>
<prop key="find*,get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="save*,update*,delete*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>

<!-- 定义BeanNameAutoProxyCreator-->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
<property name="beanNames">
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<value>userservice</value>
<value>productserivce</value>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</list>
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<!-- 此处可增加其他新的Interceptor -->
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<bean id="userdao" class="com.shop.dao.hibernate.UserDao">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<bean id="userserivce" class="com.shop.serivce.impl.UserSerivce">
<property name="userdao">
<ref local="userdao"/>
</property>
</bean>
<bean id="productdao" class="com.shop.dao.hibernate.ProductDao">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<bean id="productserivce" class="com.shop.serivce.impl.ProductSerivce">
<property name="productdao"><ref local="productdao"/></property>
</bean>
<bean id="orderdao" class="com.shop.dao.hibernate.OrdersDao">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<bean id="orderservice" class="com.shop.serivce.impl.OrderSerivce">
<property name="orderdao"><ref local="orderdao"/></property>
</bean>
<bean id="orderitemdao" class="com.shop.dao.hibernate.OrderitemDao">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<bean id="orderitemserivce" class="com.shop.serivce.impl.OrderitemSerivce">
<property name="orderitemdao"><ref local="orderitemdao"/></property>
</bean>
<bean id="orderaction" class="com.shop.action.OrderManager" scope="prototype">//后面把action教个spring管理也没用
<property name="OSerivce"><ref local="orderservice"/></property>
<property name="PSerivce"><ref local="productserivce"/></property>
</bean>
</beans>
...全文
188 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
quxiuer 2009-09-21
  • 打赏
  • 举报
回复
service曾没有注入sessionfactory

每个service都要加上红色部分

<bean id="userserivce" class="com.shop.serivce.impl.UserSerivce">
<property name="userdao">
<ref local="userdao"/>
</property>

<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>

</bean>
KeithKnight 2009-09-21
  • 打赏
  • 举报
回复
用IDE跟一下 看看哪报错了

从代码看还真不知道哪错了。。。。。。。。
longtenggdf 2009-09-21
  • 打赏
  • 举报
回复
this.getPSerivce().update(p);//数据库操作
这里报错么?
你的P根本就不是从数据库取出来来的。不能执行update操作吧!
xiaowei3856 2009-09-20
  • 打赏
  • 举报
回复
学习
yipianchuyun 2009-09-20
  • 打赏
  • 举报
回复
It's out of my ability
jacky68147527 2009-09-20
  • 打赏
  • 举报
回复
我认为应该是某些东西没有注入进去!
yztommyhc 2009-09-20
  • 打赏
  • 举报
回复
我想起来了:
private IOrderSerivce OSerivce;
private IProductSerivce PSerivce;
这里的定义不规范,JavaBean是有定义规范的,首字母应该小写。

你改成
private IOrderSerivce oSerivce;
private IProductSerivce pSerivce;
然后set和get方法也变一下,用到这2个变量的地方也改一下,再试试瞧,应该OK了。
yztommyhc 2009-09-20
  • 打赏
  • 举报
回复
对不起,上面说的是struts2的东西了,但我想spring也应该有个类似的。

你的类也应该extends某个spring的类吧。
yztommyhc 2009-09-20
  • 打赏
  • 举报
回复
public class OrderManager extends ActionSupport
{

}
Betterjava 2009-09-20
  • 打赏
  • 举报
回复
帮顶一下,,看看其他高手的回答

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧