`
jzx19770812
  • 浏览: 4312 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
文章分类
社区版块
存档分类

一个简单的主从表的增删改,采用 struts+hibernate

阅读更多
         网上有关主从表提交的资料非常的少,可怜我刚刚入门,一切都得自己想办法解决,经过N天的努力,总算是搞定了。程序写的有点徒省事,所以请别见笑。
        本来想用struts-nested标签来实现的,折腾了7个小时都搞不定,最后还是用jstl的方式搞定,最然笨了点,但是看着比较容易懂。
         下面的代码是主要部分,完整代码请送附件下载(注意编码为utf-8)
用了以下包 dom4j,hibernate3,struts1.2,junit,几个常用apache-commons包,cglib,ehcache,mysql-connector,附件代码里面没有把这些库打包,如果要运行请自己网上下载吧,反正都是开源的

参考文章 www.learntechnology.net/struts-nested.do

这是CustomerAction的部分代码

java 代码
 
  1. public class CustomerAction extends DispatchAction {  
  2.     /** 
  3.      * 打开客户增加页面 
  4.      * @param mapping 
  5.      * @param form 
  6.      * @param request 
  7.      * @param response 
  8.      * @return 
  9.      * @throws Exception 
  10.      */  
  11.     public ActionForward openAddCustomer(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {  
  12.         CustomerValueObject customer = new CustomerValueObject();  
  13.         request.setAttribute(Constants.customerBean, customer);  
  14.         return mapping.findForward("toAddCustomer");  
  15.     }  
  16.   
  17.     /** 
  18.      * 保存客户信息 
  19.      * @param mapping 
  20.      * @param form 
  21.      * @param request 
  22.      * @param response 
  23.      * @return 
  24.      * @throws Exception 
  25.      */  
  26.     public ActionForward saveCustomer(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {  
  27.         CustomerForm customerForm = (CustomerForm)form;  
  28.         Customers customer = null;  
  29.         long customerId = customerForm.getCustomer().getId();  
  30.         //根据customers.id是否为空判断是插入还是更新  
  31.         if (customerForm.getCustomer().getId() == 0){  
  32.             customer = this.customerValueObject2Customers(customerForm.getCustomer());  
  33.         }else if (customerForm.getCustomer().getId() > 0){  
  34.             String hqlString = "select c from Customers c left join fetch c.orderses o where c.id = ?";  
  35.             customer = customerDao.getObject(hqlString, new Object[]{new Long(customerId)});  
  36.             //或许这里可以用BeanUtils.copyProperty来复制bean的属性,但我试过了,总是报错,索性自己赋值了  
  37.             customer.setName(customerForm.getCustomer().getName());  
  38.             customer.getOrderses().clear();  
  39.             for(Iterator it = customerForm.getCustomer().getOrderses().iterator(); it.hasNext();){  
  40.                 OrderValueObject orderVo = it.next();  
  41.                 Orders o = new Orders();  
  42.                 BeanUtils.copyProperties(o, orderVo);  
  43.                 customer.getOrderses().add(o);  
  44.                 o.setCustomers(customer);  
  45.             }  
  46.         }  
  47.         customerDao.saveObject(customer);  
  48.         return mapping.findForward("toList");  
  49.     }  
<ordervalueobject>

下面是用于接收客户信息的值对象的完整代码

</ordervalueobject>
java 代码
 
  1. package demo.struts.valueobjects;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import org.apache.commons.collections.Factory;  
  7. import org.apache.commons.collections.ListUtils;  
  8. /** 
  9.  * 客户值对象,用于接收表单提交的客户和订单信息 
  10.  * @author Administrator 
  11.  * 
  12.  */  
  13. public class CustomerValueObject implements java.io.Serializable {  
  14.     private static final long serialVersionUID = -5142724257544817298L;  
  15.   
  16.     private long id;  
  17.   
  18.     private String name;  
  19.   
  20.     /** 
  21.      * 这是关键的一部分,也是和hibernate所用的pojo的唯一区别,这样做是为了解决在没有列表项目的时候,前端页面会报获取第0个元素失败的异常, 
  22.      * 这个工具类很好的解决了这个问题,它可以在你访问越界下标元素的时候动态的填充越界的部分,这样就不会报异常了。 
  23.      * 下面是这个LazyList的关键代码 
  24.      *     public Object get(int index) { 
  25.         int size = getList().size(); 
  26.         if (index < size) { 
  27.             // within bounds, get the object 
  28.             Object object = getList().get(index); 
  29.             if (object == null) { 
  30.                 // item is a place holder, create new one, set and return 
  31.                 object = factory.create(); 
  32.                 getList().set(index, object); 
  33.                 return object; 
  34.             } else { 
  35.                 // good and ready to go 
  36.                 return object; 
  37.             } 
  38.         } else { 
  39.             // we have to grow the list 
  40.             for (int i = size; i < index; i++) { 
  41.                 getList().add(null); 
  42.             } 
  43.             // create our last object, set and return 
  44.             Object object = factory.create(); 
  45.             getList().add(object); 
  46.             return object; 
  47.         } 
  48.     } 
  49.       */  
  50.     @SuppressWarnings("unchecked")  
  51.     private List orderses = (List)ListUtils.lazyList(new ArrayList(), new Factory(){  
  52.         public OrderValueObject create() {  
  53.             return new OrderValueObject();  
  54.         }  
  55.     });  
  56.   
  57.     public CustomerValueObject() {  
  58.     }  
  59.   
  60.     public long getId() {  
  61.         return this.id;  
  62.     }  
  63.   
  64.     public void setId(long id) {  
  65.         this.id = id;  
  66.     }  
  67.   
  68.     public String getName() {  
  69.         return this.name;  
  70.     }  
  71.   
  72.     public void setName(String name) {  
  73.         this.name = name;  
  74.     }  
  75.   
  76.     public List getOrderses() {  
  77.         return this.orderses;  
  78.     }  
  79.   
  80.     public void setOrderses(List orderses) {  
  81.         this.orderses = orderses;  
  82.     }  
  83. }  
<ordervalueobject><ordervalueobject>
下面是表单bean的完整代码,我不知道用动态bean能不能实现,如果你试成功了,请不要忘了告诉我一声。
</ordervalueobject></ordervalueobject>
java 代码
 
  1. package demo.struts.forms;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import org.apache.struts.action.*;  
  5. import demo.struts.valueobjects.*;  
  6.   
  7. /** 
  8.  * ActionForm的代码,里面负责维护一个客户的值对象 
  9.  */  
  10. public class CustomerForm extends ActionForm {  
  11.     private static final long serialVersionUID = -2128506741766449352L;  
  12.   
  13.     private CustomerValueObject customer;  
  14.   
  15.     public CustomerValueObject getCustomer() {  
  16.         return this.customer;  
  17.     }  
  18.   
  19.     public void setCustomer(CustomerValueObject customer) {  
  20.         this.customer = customer;  
  21.     }  
  22.   
  23.     /** 
  24.      * 必须在reset中创建客户对象 
  25.      */  
  26.     @Override  
  27.     public void reset(ActionMapping mapping, HttpServletRequest request) {  
  28.         customer = new CustomerValueObject();  
  29.         super.reset(mapping, request);  
  30.     }  
  31.   
  32.     @Override  
  33.     public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {  
  34.         return super.validate(mapping, request);  
  35.     }  
  36. }  


这是创建客户信息的jsp页面
xml 代码
 
  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  
  3. <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>  
  4. <%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested"%>  
  5.   
  6. >  
  7. <html>  
  8.     <head>  
  9.         <html:base />  
  10.   
  11.         <title>新客户和订单<!---->title>  
  12.   
  13.         <meta http-equiv="pragma" content="no-cache">  
  14.         <meta http-equiv="cache-control" content="no-cache">  
  15.         <meta http-equiv="expires" content="0">  
  16.         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  17.         <meta http-equiv="description" content="This is my page">  
  18.         <!---->  
  19.         <script type="text/javascript">  
  20.         function onAddOrder(url){  
  21.             frmCustomer.action = url;  
  22.             frmCustomer.target = "_self";  
  23.             frmCustomer.submit();  
  24.         }  
  25.   
  26.         function onDeleteOrder(url){  
  27.             frmCustomer.action = url;  
  28.             frmCustomer.submit();  
  29.         }  
  30.   
  31.         function onSaveCustomer(url){  
  32.             frmCustomer.action = url;  
  33.             frmCustomer.submit();  
  34.         }  
  35.     <!---->script>  
  36.     <!---->head>  
  37.     <body>  
  38.         <table>  
  39.             <form name="frmCustomer" method="post">  
  40.                 <input type="hidden" name="customer.id" value="${customer.id}" />  
  41.                 <table>  
  42.                     <tr>  
  43.                         <td>  
  44.                             客户名  
  45.                         <!---->td>  
  46.                         <td>  
  47.                             <input name="customer.name" value="${customer.name}" />  
  48.                         <!---->dh>  
  49.                     <!---->tr>  
  50.                     <tr>  
  51.                         <td colspan="2">  
  52.                             订单列表  
  53.                         <!---->td>  
  54.                     <!---->tr>  
  55.                     <tr>  
  56.                         <div id="orderList">  
  57.                             <table bgcolor="#C0C0C0" width="250px">  
  58.                                 <tr>  
  59.                                     <td>  
  60.                                            
  61.                                     <!---->td>  
  62.                                     <td>  
  63.                                         订单号  
  64.                                     <!---->td>  
  65.                                 <!---->tr>  
  66.                                     <c:forEach items="${customer.orderses}" var="order" varStatus="orderItems">  
  67.                                         <tr>  
  68.                                             <td>  
  69.                                                 <input type="hidden" name="customer.orderses[${orderItems.index}].id" value="${order.id}" />  
  70.                                             <!---->td>  
  71.                                             <td>  
  72.                                                 <input type="text" name="customer.orderses[${orderItems.index}].orderNumber" value="${order.orderNumber}" />  
  73.                                             <!---->td>  
  74.                                             <td>  
  75.                                                 <c:url var="deleteOrderUrl" value="/customers.do?method=deleteOrder">  
  76.                                                     <c:param name="index" value="${orderItems.index}" />  
  77.                                                     <c:param name="action" value="add" />  
  78.                                                 <!---->c:url>  
  79.                                                 <a href="javascript:onDeleteOrder('${deleteOrderUrl}');">删除订单<!---->a>  
  80.                                             <!---->td>  
  81.                                         <!---->tr>  
  82.                                     <!---->c:forEach>  
  83.                                 <tr>  
  84.                                     <td align="right" colspan="2">  
  85.                                         <c:url var="addOrderUrl" value="/customers.do?method=addOrder">  
  86.                                             <c:param name="action" value="add" />  
  87.                                         <!---->c:url>  
  88.                                         <a href="javascript:onAddOrder('${addOrderUrl}');">添加订单<!---->a>  
  89.                                     <!---->td>  
  90.                                 <!---->tr>  
  91.                             <!---->table>  
  92.                         <!---->div>  
  93.                     <!---->tr>  
  94.                 <!---->table>  
  95.             <!---->form>  
  96.             <tr>  
  97.                 <td colspan="2">  
  98.                     <c:url var="saveCustomerUrl"  
  99.                         value="/customers.do?method=saveCustomer" />  
  100.                     <html:link href="javascript:onSaveCustomer('${saveCustomerUrl}');">保存客户表单<!---->html:link>  
  101.                 <!---->td>  
  102.             <!---->tr>  
  103.         <!---->table>  
  104.     <!---->body>  
  105. <!---->html> 
<c:url var="saveCustomerUrl">
</c:url>
分享到:
评论
1 楼 wshcdr 2012-06-24  
MARK一记

相关推荐

    一个简单的主从表的增删改 采用struts+hibernate

    网上有关主从表提交的资料非常的少,可怜我刚刚入门,一切都得自己想办法解决,经过N天的努力,总算是搞定了。程序写的有点徒省事,所以请别见笑。 本来想用struts-nested标签来实现的,折腾了7个小时都搞不定,...

    struts+hibernate+Sql Server图书管理系统设计实例代码

    这是我用JSP+struts+hibernate+Sql Server做的一个简单的图书管理系统,用Myeclipse开发,只做了后台代码,页面没做美化。 系统实现了管理员和读者信息的增删改,以及图书的增、删、查询、外借、还回等功能模块。

    struts+spring+hibernate简单增删改实例

    `Hibernate` 是一个强大的ORM(Object-Relational Mapping,对象关系映射)框架,它可以将Java对象映射到数据库表,简化了数据库操作。在SSH架构中,Hibernate负责与数据库交互,处理数据的增、删、改、查操作。 在...

    毕业设计struts+hibernate+spring添删改查示例源码

    Struts主要处理MVC(Model-View-Controller)架构中的控制层,Hibernate则专注于持久化数据到数据库,而Spring作为一个全能框架,不仅提供了依赖注入和面向切面编程,还整合了其他两者,形成了一种强大的企业级应用...

    Struts2+hibernate实现登陆和增删改

    Struts2是一款基于MVC(Model-View-Controller)设计模式的开源框架,用于构建可维护性高、结构清晰的Web应用程序,而Hibernate则是一个对象关系映射(ORM)工具,它简化了数据库操作,将Java对象与数据库表进行映射...

    spring+struts2+hibernate框架双表增删改查

    总之,"spring+struts2+hibernate框架双表增删改查"项目为初学者提供了一个完整的实战平台,通过这个项目,学习者可以深入理解这三个框架如何协同工作,实现复杂的数据操作,同时掌握Java Web开发的基本流程和技巧。...

    struts2+hibernate实现登录及增删改操作

    综上所述,"struts2+hibernate实现登录及增删改操作"涉及到的是如何利用这两个框架构建一个完整的Java Web应用,包括用户身份验证、数据库操作以及对数据的增删改等核心功能。这个小案例可以帮助开发者理解并熟练...

    用struts2+ spring+ hibernate编写的增删改程序

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责应用程序的不同层面,共同构建了一个强大的MVC(Model-View-Controller)架构。在这个“用struts2+ spring+ hibernate编写的增删改程序”中,...

    struts+hibernate学生管理系统

    Struts是MVC(Model-View-Controller)架构模式的一个实现,主要负责处理用户的请求和展示数据,而Hibernate则是一个对象关系映射(ORM)工具,用于简化数据库操作。 在"struts+hibernate学生管理系统"项目中,...

    struts+hibernate+spring添删改查源码示例

    这个"struts+hibernate+spring添删改查源码示例"是针对这三大框架集成使用的一个实践教程,帮助开发者理解和学习如何在实际项目中进行数据的增删改查操作。 1. **Struts**:Struts 是一个基于MVC(Model-View-...

    struts2+spring2.5+hibernate3.3例子(增删改)

    这个例子展示了如何将这三个框架整合在一起,实现一个简单的图书管理系统的增删改操作。 **Struts2** 是一个基于MVC设计模式的Web应用框架,它提供了一种组织应用程序的方式,使得业务逻辑与展示层分离。Struts2的...

    struts+hibernate+spring添删改查示例源码

    Struts、Hibernate和Spring是Java开发中非常经典的三个框架,它们各自在Web应用的不同层面上发挥作用,共同构建了一个强大的企业级应用开发模型。这个"struts+hibernate+spring添删改查示例源码"是用于演示如何在...

    玩玩Spring之struts+hibernate+spring添删改查示例.doc

    Struts则是一个MVC(Model-View-Controller)框架,专注于处理用户的请求和展示结果。它将用户的交互与业务逻辑分离,使得系统更加模块化和易于维护。 Hibernate作为ORM(Object-Relational Mapping)工具,负责...

    struts2+hibernate整合增删改查加注册登录Demo包含数据库自动建表语句

    本教程通过一个简单的Demo,展示了如何将这两个框架整合,实现基本的CRUD(创建、读取、更新、删除)操作,并结合登录注册功能,为初学者提供了很好的学习资源。 首先,Struts2是基于Action的MVC框架,它处理用户...

    Struts+Spring+Hibernate电子政务网站系统

    【简要说明】:系统自身具有强大、完善的网站后台管理功能,可以为每个科局(科室\部门)设定不同的管理权限,动态增删改栏目,有如WORD文档处理般的图文混排功能,操作方便。系统前台的栏目、菜单、功能入口等全部...

    struts+hibernate实现的网络购物系统.zip

    3. 购物车:用户可以将商品添加到购物车,Struts处理购物车的增删改操作,Hibernate负责在后台数据库中同步这些变化。 4. 订单处理:用户提交订单后,系统需要处理订单状态(如待支付、已支付、已发货等)。Struts...

    购物车实例(struts+hibernate)

    【购物车实例(Struts+Hibernate)】是一个典型的Web应用开发案例,主要针对那些刚开始学习Struts和Hibernate框架的开发者。这个实例通过实现一个在线购物车的功能,帮助开发者理解这两个框架如何协同工作来构建实际...

    struts2+hibernate登录注册增删改分页查询

    4. **Action和Result**:Struts2的Action类是处理用户请求的核心,它负责接收请求、调用业务逻辑(如服务层的方法,这些方法可能使用Hibernate进行数据库交互)并返回一个Result。Result决定如何处理Action的结果,...

Global site tag (gtag.js) - Google Analytics