struts--批量封装对象

原创 2007年10月02日 21:28:00

Struts1.2应用-批量封装对象

                                                                      ++YONG原创,转载请注明

1.    批量发布产品信息效果图: 

上图为批量发布产品页面。

上图为显示刚批量发布的产品页面。

2.    具体实现:

2.1.    域模型对象:Product.java

package org.qiujy.domain;

 

import java.sql.Date;

 

/**

 * 产品---实体域模型类

 * @author qiujy

 * @version 1.0

 */

public class Product {

    private Long id;

    private String name;

    private double price;

    private Date pubTime = new Date(new java.util.Date().getTime());

 

    public Product() {

    }

 

    public Product(Long id, String name, double price, Date pubTime) {

        this.id = id;

        this.name = name;

        this.price = price;

        this.pubTime = pubTime;

    }

 

    /**

     * @return the id

     */

    public Long getId() {

        return id;

    }

 

    /**

     * @param id

     *            the id to set

     */

    public void setId(Long id) {

        this.id = id;

    }

 

    /**

     * @return the name

     */

    public String getName() {

        return name;

    }

 

    /**

     * @param name

     *            the name to set

     */

    public void setName(String name) {

        this.name = name;

    }

 

    /**

     * @return the price

     */

    public double getPrice() {

        return price;

    }

 

    /**

     * @param price

     *            the price to set

     */

    public void setPrice(double price) {

        this.price = price;

    }

 

    /**

     * @return the pubTime

     */

    public Date getPubTime() {

        return pubTime;

    }

 

    /**

     * @param pubTime

     *            the pubTime to set

     */

    public void setPubTime(Date pubTime) {

        this.pubTime = pubTime;

    }

}

在这个类中日期的类型用的是java.sql.Date,而不是java.util.Date。这是因为Struts 1.x不支持请求参数到java.util.Date的转换,归根到底是由于org.apache.commons.beanutils.ConvertUtilsBean.convert()不支持关于java.util.Date的转换。另外,值得注意的是common-beanutils是通过java.sql.Date.valueOf()方法工作的,所以在页面输入的字符串的格式必须为“yyyy-MM-dd”。

2.2.    创建一个自定义列表集合:

它继承自LinkedList类,重写get()方法,作用就是在Struts 1.x框架调用这个方法时,如果index超出列表大小,则会实例化新项放到列表中,避免出现(IndexOutOfBoundsException)异常。

package org.qiujy.common;

 

import java.util.LinkedList;

 

/**

 * 类说明: ActionForm中使用,以避免OutOfIndexException

 * 注意:不要在其他地方使用本类

 * @author qiujy

 * @version 1.0

 */

public class AutoInitArrayList extends LinkedList{

    /** 容器内保存的类 */

    private Class clazz;

   

    /**私有构造函数,保证外界无法直接实例化*/

    private AutoInitArrayList() {

    }

   

    public AutoInitArrayList(Class clazz) {

        this.clazz = clazz;

    }

    /**

     * save the updates of customer types.

     */

    public Object get(int index) {

        try {

            if (super.size() < index + 1) {

                int cnt = index + 1 - super.size();

                for (int i = 0; i < cnt; i++) {

                    super.add(clazz.newInstance());

                }

            }

        } catch (InstantiationException e) {

            e.printStackTrace();

        } catch (IllegalAccessException e) {

            e.printStackTrace();

        }

        return super.get(index);

    }

}

2.3.    Struts-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

 

<struts-config>

  <data-sources />

  <form-beans >

    <form-bean name="batchWrappingForm" type="org.qiujy.web.struts.form.BatchWrappingForm" />

 

  </form-beans>

 

  <global-exceptions />

  <global-forwards />

  <action-mappings >

    <action

      attribute="batchWrappingForm"

      input="/batchWrapping.jsp"

      name="batchWrappingForm"

      path="/batchWrapping"

      scope="request"

      parameter="method"

      type="org.qiujy.web.struts.action.BatchWrappingAction">

         <forward name="toCurrent" path="/batchWrapping.jsp"/>

         <forward name="toList" path="/displayinfo.jsp"/>

      </action>

 

  </action-mappings>

 

  <message-resources parameter="org.qiujy.web.struts.ApplicationResources" />

</struts-config>

2.4.    Form Bean

package org.qiujy.web.struts.form;

 

import java.util.List;

 

import org.apache.struts.action.ActionForm;

import org.qiujy.common.AutoInitArrayList;

import org.qiujy.domain.Product;

 

/**

 * 批量封装示例Form Bean

 * @author qiujy

 * @version 1.0

 */

public class BatchWrappingForm extends ActionForm {

   

    private int optId; //操作ID

    private List products = new AutoInitArrayList(Product.class);

   

    public BatchWrappingForm(){

    }

    /**

     * @return the products

     */

    public List getProducts() {

        return products;

    }

 

    /**

     * @param products the products to set

     */

    public void setProducts(List products) {

        this.products = products;

    }

   

    /**

     * List中新增一个Product对象

     */

    public void addItem(){

       this.products.add(new Product());

    }

   

    /**

     * List中删除指定索引的Product对象

     * @param index

     */

    public void deleteItem(int index){

       int size = products == null ? 0 : products.size();

       if(index >=0 && index < size){

           this.products.remove(index);

       }

    }

 

    /**

     * @return the optId

     */

    public int getOptId() {

        return optId;

    }

 

    /**

     * @param optId the optId to set

     */

    public void setOptId(int optId) {

        this.optId = optId;

    }

}

2.5.    Action类:

package org.qiujy.web.struts.action;

 

import java.util.List;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.actions.DispatchAction;

import org.qiujy.web.struts.form.BatchWrappingForm;

 

/**

 * 批量封装示例Action

 * @author qiujy

 * @version 1.0

 */

public class BatchWrappingAction extends DispatchAction {

 

    /**

     * 保存所有的产品

     * @param mapping

     * @param form

     * @param request

     * @param response

     * @return

     */

    public ActionForward saveAll(ActionMapping mapping, ActionForm form,

            HttpServletRequest request, HttpServletResponse response) {

        BatchWrappingForm batchWrappingForm = (BatchWrappingForm) form;

        List temp = batchWrappingForm.getProducts();

       

        request.setAttribute("products", temp);

       

        return mapping.findForward("toList");

    }

   

    /**

     * 新增一项

     * @param mapping

     * @param form

     * @param request

     * @param response

     * @return

     */

    public ActionForward addItem(ActionMapping mapping, ActionForm form,

            HttpServletRequest request, HttpServletResponse response) {

        BatchWrappingForm batchWrappingForm = (BatchWrappingForm) form;

       

        batchWrappingForm.addItem();

       

        return mapping.findForward("toCurrent");

    }

   

    /**

     * 删除当前项

     * @param mapping

     * @param form

     * @param request

     * @param response

     * @return

     */

    public ActionForward deleteItem(ActionMapping mapping, ActionForm form,

            HttpServletRequest request, HttpServletResponse response) {

        BatchWrappingForm batchWrappingForm = (BatchWrappingForm) form;

       

        batchWrappingForm.deleteItem(batchWrappingForm.getOptId());

       

        return mapping.findForward("toCurrent");

    }

}

2.6.    输入页面:batchWrapping.jsp

<%@ page language="java" pageEncoding="utf-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

<html>

    <head>

        <title>批量封装对象示例</title>

        <script type="text/javascript">

        <!--

            function setParamValue(parameter, value) {

                if (document.getElementById(parameter) != undefined) {

                    document.getElementById(parameter).value = value;

                }

            }

        //-->

        </script>

    </head>

    <body>

        <h2 align="center">批量封装对象示例</h2>

        <hr/>

        <form action="batchWrapping.do" method="post">

        <input type="hidden" name="method" value="saveAll">

        <input type="hidden" name="optId">

        <table border="0" width="680px" align="center">

            <tr style="background-color: powderblue; font-weight: bold;">

                <td width="30%">产品名</td>

                <td width="20%">价格</td>

                <td width="30%">生产日期</td>

                <td width="20%">操作</td>

            </tr>

<c:forEach var="prod" items="${batchWrappingForm.products}" varStatus="status">

            <tr>

                <td >

    <input name="products[${status.index}].name" value="${prod.name}"/>

                </td>

                <td>

    <input name="products[${status.index}].price" value="${prod.price}"/>

                </td>

                <td>

<input name="products[${status.index}].pubTime" value="<fmt:formatDate value='${prod.pubTime}' type='date'/>"/>

                </td>

                <td>

<input type="button" value="删除此列" onclick="javascript:setParamValue('optId', '${status.index }');setParamValue('method', 'deleteItem'); this.form.submit();"/>

                </td>

            </tr>

</c:forEach>

            <tr style="background-color: powderblue;">

                <td colspan="4" align="center">

                    <input type="submit" value=" 提交 " />&nbsp;

                    <input type="submit" value=" 重置 " />&nbsp;&nbsp;

                    <input align="center" type="button" value="新增一列" onclick="javascript:setParamValue('method', 'addItem'); this.form.submit();"/>

                </td>

            </tr>

        </table>

        </form>

    </body>

</html>

本页面中,最关键的地方是组装<input>的元素名称,Struts 1.2对名称格式类似“xxx[9].xx”的请求,会进行封装。

2.7.    最终显示页面:displayinfo.jsp

<%@ page language="java" pageEncoding="utf-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

<html>

    <head>

        <title>显示批量封装的对象</title>

    </head>

    <body>

        <h2 align="center">显示批量封装的对象</h2>

        <hr />

        <table border="0" width="680px" align="center">

            <tr style="background-color: powderblue; font-weight: bold;">

                <td width="10%">序号</td>

                <td width="35%">产品名</td>

                <td width="20%">价格</td>

                <td width="35%">生产日期</td>

            </tr>

            <c:forEach var="prod" items="${products}" varStatus="status">

                <tr>

                    <td><c:out value="${status.count}" /></td>

                    <td><c:out value="${prod.name}" /></td>

                    <td><c:out value="${prod.price}" /></td>

                    <td><fmt:formatDate value='${prod.pubTime}'/></td>

                </tr>

            </c:forEach>

        </table>

    </body>

</html>

 

3.    参考文档:

http://www.blogjava.net/max/archive/2006/12/08/86439.html

4.    本例源代码:

      

 

Struts1.2应用-批量封装对象

1.    批量发布产品信息效果图:  上图为批量发布产品页面。上图为显示刚批量发布的产品页面。2.    具体实现:2.1.    域模型对象:Product.java ...
  • lenolong
  • lenolong
  • 2008年12月14日 17:30
  • 1074

Java对象封装

在看了设计模式-迪米特法则之后,应该就可以理解Java中对象的封装。什么是封装?在Java中定义了类,其实有点类似于面向过程设计中定义一个结构体一样,但是有个概念必须清楚,那就是定义类不等于做好了封装...
  • Mrljdx
  • Mrljdx
  • 2015年04月07日 10:00
  • 1326

js封装对象

封装对象是JS原生提供的功能~跟jquery无关~ var car = new Object(); car.color = "red"; car.run = function() { //.....
  • guorun18
  • guorun18
  • 2015年11月13日 14:42
  • 1159

javascript基础--对象(Object)封装

引言 说到对象,我想到一个成语叫作谈虎色变,对象应该说是javascript中最难得一部分,原因呢,首先,js作为函数式编程语言,对象的实现方式跟java,c,c++等面向对象设计语言不一样;其次...
  • csdn_kingboss
  • csdn_kingboss
  • 2017年02月03日 16:21
  • 296

JS 对象封装的常用方式

达人科技 2016-12-14 02:05 JS是一门面向对象语言,其对象是用prototype属性来模拟的,下面,来看看如何封装JS对象. 常规封装 function Person...
  • u011277123
  • u011277123
  • 2016年12月14日 10:06
  • 394

对象封装思想

“你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起。” ----------Arthur J.Riel (1)所有数据都应...
  • JERRYLOVEYOUCSDN
  • JERRYLOVEYOUCSDN
  • 2014年05月01日 11:20
  • 779

批量替换ORCAD 原理图中的器件封装

方法一:第一步:打开ORCAD 的设计工程文件,选中设计文件*.DSN,接着选择菜单Edit->Find…,弹出查找对话框; 第二步:在Find What 处添上你需要替换的封装名称,例如现在修改:S...
  • ywxiao66
  • ywxiao66
  • 2013年07月15日 16:07
  • 2177

mybatis中的映射通过collection来封装对象的list值

mybatis中的映射通过collection来封装对象的list值
  • bawcwchen
  • bawcwchen
  • 2015年02月03日 23:30
  • 3068

对象封装和类--详解

          面向对象思想有三个核心要素:封装、继承与多态。如能正确理解这三要素,那么基本上可以算是在编程中建立了面向对象思想。在第二节中我曾介绍,在C#中, 所有数据类型的实例都是“对象”,不...
  • sxzhliang
  • sxzhliang
  • 2007年10月22日 15:33
  • 463

mybatis association封装对象

1 定义mybatis对象 其实association 跟hibernate的对象有些类似,而hibernate确实比较难用,搞了hql、二级缓存需要深入进去,模式比较笨重。我们做应用开发的,为啥要...
  • warrah
  • warrah
  • 2016年08月21日 10:38
  • 485
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:struts--批量封装对象
举报原因:
原因补充:

(最多只允许输入30个字)