写了一个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>
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>
解决方案 »
- websphere 启动服务报错
- 超详细的PHP和JAVA开发的OA系统优劣全面比较
- 100分求解HttpServletRequest对象和HttpServletResponse对象问题 解决后立即结贴
- JSF,我是JSF的初学者看了资料觉得很蒙,有几个问题想请教?谢谢。
- jsp和Hibernate能不能共用?
- 基于Struts的.war应用程序怎么使用?
- js导航条居中问题!急~!
- 如何让显示的文章分段?????
- ??用户登陆后,必须刷新一次才能显示网页本来的内容??
- oracle9i分页问题 请教牛人 急 在线等
- 在js里有一个数组, 传到java里,怎么去解析?
- siteMesh配置文件的名称及路径问题
{}
private IOrderSerivce OSerivce;
private IProductSerivce PSerivce;
这里的定义不规范,JavaBean是有定义规范的,首字母应该小写。你改成
private IOrderSerivce oSerivce;
private IProductSerivce pSerivce;
然后set和get方法也变一下,用到这2个变量的地方也改一下,再试试瞧,应该OK了。
<property name="userdao">
<ref local="userdao"/>
</property>
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
这里报错么?
你的P根本就不是从数据库取出来来的。不能执行update操作吧!