写了一个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&amp;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>

解决方案 »

  1.   

    public class OrderManager extends ActionSupport
    {}
      

  2.   

    对不起,上面说的是struts2的东西了,但我想spring也应该有个类似的。你的类也应该extends某个spring的类吧。
      

  3.   

    我想起来了:
    private IOrderSerivce OSerivce; 
    private IProductSerivce PSerivce; 
    这里的定义不规范,JavaBean是有定义规范的,首字母应该小写。你改成
    private IOrderSerivce oSerivce; 
    private IProductSerivce pSerivce;
    然后set和get方法也变一下,用到这2个变量的地方也改一下,再试试瞧,应该OK了。 
      

  4.   

    It's  out  of my ability
      

  5.   

    用IDE跟一下 看看哪报错了从代码看还真不知道哪错了。。
      

  6.   

    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> 
      

  7.   

    this.getPSerivce().update(p);//数据库操作 
    这里报错么?
    你的P根本就不是从数据库取出来来的。不能执行update操作吧!