批量修改以及获取多个CheckBox元素相关处理

这两天在做一个项目、赶工那个紧啊、每天加班到晚上10点、代码写的头昏脑胀的。

但也学到了东西、其中有一点就是JavaScript、相信很多人长时间不用都会见见的忘记、特别是一些不常用的页面元素的处理、例如:Checkbox

单个元素当然是很容易就获取并且取值的、但是如果很多就比较麻烦了。

我这里用的是Struts1+Jsp+MySql做的项目、过程中要把一个数组通过.do请求传给Action、以前没有遇到类似的情况、写的时候磕磕绊绊、最终还是弄出来了、今个活不是很多、写下此篇和大家一起分享一下。

 

技术点:(可能对牛人而言都不算什么技术、小儿科而以、但对于初入此行的人来说、难度有一点点)

1、获取jsp页面中12个(4个一组、共3组)CheckBox元素、判断哪个被选中、那个没被选中、选中为1、未选中为0、把所有的值都传到Action做对应的处理。

2.批量修改

 

上图:

 

 

数据库里的记录并不是页面中看到的这样、我循环了4次、每次只显示其中一列的数据才出来这样的效果、数据库里的记录就只有1或者0、如果是1选中、0就补选中、

下面附上数据库里数据的截图:

 

数据库里的记录是横的、而jsp页面中显示的是竖着的、大家可能不太理解、我说的横竖的意思、遇到过类似问题的朋友、应该懂得、数据不能一次全部显示、故每次显示一列数据。

 

 

JSP页面中一共12个CheckBox、获取元素、并判断是否被选中的代码如下:

<script type="text/javascript">
  function ccheckbox(){
     //被选中等于1、未选中等于0
        var arr = new Array(12);

                       //页面告警checkbox数组
      var page = document.getElementsByName("alarmconfig.pagealarm");

      //邮件告警checkbox数组

      var eamil = document.getElementsByName("alarmconfig.emailalarm");

      //短信告警checkbox数组

      var sms = document.getElementsByName("alarmconfig.smsalarm");
      
      for(var i=0;i<page.length;i++){
       if(page[i].checked==true){
        arr[i]=1;
       }else{
        arr[i]=0;
       }
      }
      
      for(var j=0;j<eamil.length;j++){
       if(eamil[j].checked){
        arr[j+4]=1;
       }else{
        arr[j+4]=0;
       }
      }
      
      for(var k=0;k<sms.length;k++){
       if(sms[k].checked){
        arr[k+8]=1;
       }else{
        arr[k+8]=0;
       }
      }

      //arr数组传给Action
      alarmconfigForm.action="alarmconfigEditSave.do?arr="+arr;
      alarmconfigForm.submit();
     }
  </script>

一共三个小数组、再放到一个元素个数为12的大数组、最后提交表单传给Action

Action中利用Request接收、朋友们知道、默认是String类型的、但是你不能用Stirng类型去接收他、不然后面的数据就不会了

要用

  // 接收页面javascript/function函数传值
  Object pagealarm = request.getParameter("arr");

对象里Get/Set的方法里是int类型所有要把这个数组转换为int类型的、但是发现不能直接转换

故有了下面的代码、可能方法很笨拙、大家见笑了。

  char[] a = ((String) pagealarm).toCharArray();
  String b = String.valueOf(a);
  String c[] = b.split(",");
  int d[] = new int[12];
  for (int i = 0; i < c.length; i++) {
   d[i] = Integer.parseInt(c[i]);
  }

 

最终赋值给对像、

下面说一下批量修改、以前做过批量删除、但是批量删除和批量修改不一样、(开始我以为一样)

批量删除、传给方法一个ID数组、为什么传ID数组、删除的时候就是根据ID删除、所以只需要ID就可以完成批量删除、

但是批量修改不仅仅需要ID、还需要其他的数据、拿我这个来说、还需要告警等级、页面告警、邮件告警、短信告警、

这样用数组就显得麻烦了、但并不是不行、大胆的想一下、干脆就传一个ArrayList对象集合给update()方法吧、以前也没有试过、

成不成、试过才知道、程序员就是要敢于尝试嘛、创建了四个对象放进AttayList对象里传给方法、在方法中遍历list集合、拼接SQL语句

、但是别忘了在拼接玩一个SQL语句的时候加个“;”、不然执行就暴错、批量修改其实就是一次性执行了4跳update的SQL语句、

没有想象的那么复杂。

还有另外一种方法、就是调用4次更新的方法、虽然显得笨拙了点、但也能实现同样的效果。

所谓殊途同归嘛。

 

XiaoFeng寄语:

         感谢您花时间、看我的博客、眼睛一定很酸了吧、来看一下美女吧、超萌超可爱的小美女相信会让您心情大好、XiaoFeng博客欢迎您的光临。

 http://my.csdn.net/se_xiaofeng    Welcome to my blog!

   

 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值