注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

山林客

简单不一定幸福,但幸福其实可以很简单。

 
 
 

日志

 
 
关于我

2004年毕业于中山大学,毕业后专注于网站开发和网络工程技术。先后取得SCWCD、CCNP认证,对Asp/Java有丰富的开发经验,对网络工程也有较深的研究。真诚欢迎大家多多指教、多多指点、多多指正,共同分享IT道路和人生道路上的喜怒哀乐。

如何对记录条目数量不确定的多行数据进行保存  

2008-11-08 22:21:34|  分类: JavaEE |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在做欠税系统的时候我遇到了一个需求,就是可以让用户同时添加多条记录,但这里的记录条数并不固定,由用户自动增减。如下图:

当用户点击“添加欠税记录”的时候,可以自动增加一个空行给用户输入数据。当用户点击“移除”按钮的时候则移除该行数据。

由于行数不固定,所以我们在后台数据处理的时候不能通过简单的request.getParameter()来逐个获取用户的数据,唯一的方法是用request.getParameterNames()获取全部表单域,然后用枚举的方式来获取这些值。

现在的问题是,我这里的第一行的欠税金额应该跟第一行的税种对应,而不是对应到第二行的税种。如果这样简单地获取,我是无法将每一行的数据归并在一起的,比如说,。因为request.getParameterNames()返回的是一个Enumeration,而Enumeration的顺序是不确定的。

我的做法是,用一个数字标识相同行的多个表单域,例如“qsje_1”表示第一行的“欠税金额”,“sz_1”表示第一行的“税种”。

在获取数据的时候,可以考虑使用TreeSet或者TreeMap,因为这两个集合都有排序功能,而且可以传入一个自定义的比较器来确保数据按我们的需要进行排序。例如,我们需要“qsje_2”排在“qsje_11”的前面。

比较器:

package comparator.qianshui.panyu;

import java.util.Comparator;


public class TextInputComparator implements Comparator{

    public int compare(Object o1, Object o2) {
        if(!(o1 instanceof String) || !(o2 instanceof String))
              throw new IllegalArgumentException("Illegal");
        String str1 = (String)o1;
        String str2 = (String)o2;
        if(str1.length()<2 || str2.length()<2 || str1.indexOf('_')==-1 || str2.indexOf('_')==-1)
            throw new IllegalArgumentException("Illegal");
        String[] arr1 = str1.split("_");
        String[] arr2 = str2.split("_");
        int i1 = Integer.parseInt(arr1[1]);
        int i2 = Integer.parseInt(arr2[1]);
        return i1-i2;
    }

}

Servlet代码:

        TextInputComparator paramComparator = new TextInputComparator();
        TreeSet setQsje = new TreeSet(paramComparator);
        TreeSet setSz = new TreeSet(paramComparator);
        TreeSet setSssqq = new TreeSet(paramComparator);
        TreeSet setSssqz = new TreeSet(paramComparator);
        TreeSet setJkqx = new TreeSet(paramComparator);
        TreeSet setSksx = new TreeSet(paramComparator);
        TreeSet setCy = new TreeSet(paramComparator);
        TreeSet setYjrq = new TreeSet(paramComparator);

        Enumeration parameterNames = request.getParameterNames();
        while (parameterNames.hasMoreElements()) {
            String parameterName = (String) parameterNames.nextElement();
           
            if (parameterName.startsWith("qsje")) {
                setQsje.add(parameterName);
            } else if (parameterName.startsWith("sz")) {
                setSz.add(parameterName);
            } else if (parameterName.startsWith("sssqq")) {
                setSssqq.add(parameterName);
            } else if (parameterName.startsWith("sssqz")) {
                setSssqz.add(parameterName);
            } else if (parameterName.startsWith("jkqx")) {
                setJkqx.add(parameterName);
            } else if (parameterName.startsWith("sksx")) {
                setSksx.add(parameterName);
            } else if (parameterName.startsWith("cy")) {
                setCy.add(parameterName);
            } else if (parameterName.startsWith("yjrq")) {
                setYjrq.add(parameterName);
            } 
        }

 

 


        Iterator iteratorQsje = setQsje.iterator();
        Iterator iteratorSz = setSz.iterator();
        Iterator iteratorSssqq = setSssqq.iterator();
        Iterator iteratorSssqz = setSssqz.iterator();
        Iterator iteratorJkqx = setJkqx.iterator();
        Iterator iteratorSksx = setSksx.iterator();
        Iterator iteratorCy = setCy.iterator();
        Iterator iteratorYjrq = setYjrq.iterator();

        Timestamp sssqq = null;
        Timestamp sssqz = null;
        Timestamp jkqx = null;
        Timestamp yjrq = null;
        Timestamp addtime = new Timestamp(new Date().getTime());

        DateFormat dateFormat = DateFormat.getDateInstance();
        Date date_sssqq = null;
        Date date_sssqz = null;
        Date date_jkqx = null;
        Date date_yjrq = null;
        String sz = null;
        
        while (iteratorQsje.hasNext()) {
            String str_qsje = request.getParameter((String) iteratorQsje.next());
            if (!"".equals(str_qsje)) {
                try {
                    Qsmx qsmx = new Qsmx();
                    qsmx.setQsje(Double.parseDouble(str_qsje));
                    qsmx.setNsrsbh(nsrsbh);
                    sz = request.getParameter((String) iteratorSz.next());
                    qsmx.setSz(sz);
                    date_sssqq = dateFormat.parse(request.getParameter((String) iteratorSssqq.next()));
                    sssqq = new Timestamp(date_sssqq.getTime());
                    qsmx.setSssqq(sssqq);
                    date_sssqz = dateFormat.parse(request.getParameter((String) iteratorSssqz.next()));
                    sssqz = new Timestamp(date_sssqz.getTime());
                    qsmx.setSssqz(sssqz);
                    date_jkqx = dateFormat.parse(request.getParameter((String) iteratorJkqx.next()));
                    jkqx = new Timestamp(date_jkqx.getTime());
                    qsmx.setJkqx(jkqx);
                    qsmx.setSksx(request.getParameter((String) iteratorSksx.next()));
                    qsmx.setCy(request.getParameter((String) iteratorCy.next()));
                    String str_yjrq = request.getParameter((String) iteratorYjrq.next());
                    if (str_yjrq != null && !"".equals(str_yjrq)) {
                        date_yjrq = dateFormat.parse(str_yjrq);
                        yjrq = new Timestamp(date_yjrq.getTime());
                        qsmx.setYjrq(yjrq);
                    }else{
                        date_yjrq = dateFormat.parse("2000-01-01 01:01:01");
                        yjrq = new Timestamp(date_yjrq.getTime());
                        qsmx.setYjrq(yjrq);
                    }
                    qsmx.setAddtime(addtime);
                   

                    DAOFactory.getQsmxDAOInstance().insert(qsmx);//保存数据到数据库

                } catch (Exception e) {
                    e.printStackTrace();
                }

            }

 

  评论这张
 
阅读(662)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018