项目中有如下需求。可能考虑到比较实用,因此特写下此文,仅供参考。

页面结构大致介绍如下:

下图是一个frameset的结构,;

  1. <frameset rows="*" cols="216,683" frameborder="no" border="0" framespacing="0">
  2. <frame src="web/event/left.jsp"  name="left" scrolling="No" noresize="noresize" id="leftFrame"/>
  3. <frame src="right.html"  name="right"/>
  4. </frameset>

左侧的“组别”,对应的是一组List的返回值,也就是说这些组别是从数据库里面读取出来的。

右侧的项目名称,也是一组List的返回值,取里面的name值,后面的赛次数,等其他字段是需要批量保存进数据库表A的。

表A里面的名称是由 组别 + 项目名称 组合起来的。

例如:中学男子甲组60米 这样。

下面,帖上代码,并做有详细的讲解。

①需批量增加的文本框,均是name="eventSelects"

  1. <input type="text" name="eventSelects"/>
  2. <input type="text" name="eventSelects"/>
  3. 。。。

下面的两隐藏域,是用来做拼接之用。左侧的组别名字,可以通过参数传递过来,

  1. <input type="hidden" name="eventSelects" value="<%=request.getParameter("fullName")%>"/>
  2. <input type="hidden" name="eventSelects" value="<s:property value="name" />"/>

传递参数的方法如下:

  1. <a href="item/findByUserId2.action?id=${session.userId}&&fullName=<s:property value="fullName"/>" target="right">

注意:此处是中文参数名,会出现乱码等情况,需要我们后台来处理下。见下面的代码。

②后台部分如下:

  1. private String[] eventSelects;
  2. public String[] getEventSelects() {
  3. return eventSelects;
  4. }
  5. public void setEventSelects(String[] eventSelects) {
  6. this.eventSelects = eventSelects;
  7. }

③Action代码如下:

  1. public String saveEventBatch() throws Exception {
  2. try {
  3. HttpServletRequest request = ServletActionContext.getRequest();
  4. eventSelects = request.getParameterValues("eventSelects");
  5. Map session = ActionContext.getContext().getSession();
  6. String userId = session.get("userId").toString();
  7. for (int i = 0; i < eventSelects.length; i++) {
  8. event = new Event();
  9. String a = new String(eventSelects[i].getBytes("iso-8859-1"),"UTF-8");
  10. event.setName(a+eventSelects[i+1]);
  11. event.setRace(eventSelects[i+2]);
  12. event.setGroupTime(Long.parseLong(eventSelects[i+3]));
  13. event.setTrackPriority(eventSelects[i+4]);
  14. i+=4;
  15. event.setUserId(Long.parseLong(userId));
  16. this.eventService.saveEvent(event);
  17. }
  18. } catch (Exception e) {
  19. // TODO: handle exception
  20. e.printStackTrace();
  21. return INPUT;
  22. }
  23. return SUCCESS;
  24. }

其中需要注意的是,第6行,

  1. HttpServletRequest request = ServletActionContext.getRequest();
  2. eventSelects = request.getParameterValues("eventSelects");

获取这个数组,然后在下面的代码中进行迭代,取出数组里面的值,然后批量保存。

第10行代码,此处需要new 一个event对象,因为一般Struts2中通过属性封装,

  1. private Event event;
  2. public void setEvent(Event event) {
  3. this.event = event;
  4. }
  5. public Event getEvent() {
  6. return event;
  7. }

,然后页面 event.name ,event.userId等这样,就相当于封装了一个form,我们这里没有这样做,name 不是对象.属性这种方式,因此需要在局部new一个对象出来。

第11行,还记得上文的那个中文参数吗?此处就是用来转码的,如果不转码,会发现url中文参数,存入的是乱码。

第12行--第15行,分别读取数组里面的字段,然后依次存入对象里面。因为数组里面的值类似下面【1,2,3,4,5,6,7,8】 这样,是通过序号index(也叫数组下标)来访问的。12行实现了字符串的拼接。

第16行 i+=4,是因为,下一条的数据是序号从5开始的,如果没此条语句,则可能会报错,因为,把数组里面的值存错位置了。

本文转自 w156445045 51CTO博客,原文链接:http://blog.51cto.com/enetq/836624,如需转载请自行联系原作者

SSH下的组合批量增加相关推荐

  1. SSM框架之批量增加示例(同步请求jsp视图解析)

    准备环境:SSM框架+JDK8/JDK7+MySQL5.7+MAVEN3以上+Tomcat8/7应用服务器 示例说明: 分发给用户优惠券,通过checkbox选中批量分发,对应也就是批量增加. 对于公 ...

  2. rbac 权限分配, 基于formset实现,批量增加

    这里需要两个知识点: - formset - 自动发现项目中的URL 1. 什么是formset: Django中 form组件 或 ModelForm组件,用于做一个表单的验证. 接收前端form表 ...

  3. linux 程序 减肥,linux下实用软件组合 -- 为你的 linux 减肥!

    linux下实用软件组合 -- 为你的 linux 减肥! 发布时间:2005-12-07 19:49:38来源:红联作者:Mrlinux KDE 和 Gnome 都是很好用的桌面系统.如果你的电脑配 ...

  4. 机器人锤石下路组合_《LOL》S9超强下路组合卡莎机器人玩法攻略

    LOL英雄联盟S9卡莎机器人下路组合是一对非常强大的上分组合,在对线的时候一定要尽可能的打出控制效果,这个组合下路的机动性.控杀能力都非常的强,前中期利用好这个特点能比较快的建立好下路的优势. 下路组 ...

  5. 机器人锤石下路组合_下路骚套路—辅助二人组之:锤石+机器人

    英雄联盟中唯一一个同时需要具有两个英雄走的路路就是下路.而下路通常是一个射手,配上一个辅助来进行配合.比如说德莱文加风女,小炮加机器人,VN加锤石等等组合,而且并不是一成不变的.任何一个辅助和任何一个 ...

  6. JDBC批量操作批量增加批量修改

    批量增加 利用JdbcTemplate的batchUpdate方法 有两个参数,第一个是Sql语句,第二个是list集合 代码: 1.先在service中创建方法(已经有了增删改查方法,现在加上) p ...

  7. ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql

    在实际应用中,经常碰到导入数据的功能,当导入的数据不存在时则进行添加,有修改时则进行更新, 在刚碰到的时候,第一反应是将其实现分为两块,分别是判断增加,判断更新,后来发现在mysql中有 ON DUP ...

  8. linux usb 批量传输文件,一种Linux系统下提升usb批量传输速度的方法及系统与流程...

    本发明涉及通信传输技术领域,具体地说是一种linux系统下提升usb批量传输速度的方法及系统. 背景技术: linux系统访问usb设备有两种方式:编写内核驱动模块ko和在用户空间编写程序,通过内核提 ...

  9. Linux打印添加水印,Linux 下给图片批量加水印

    一个非盈利组织的项目负责人突发奇想想给他们网站上的每张照片加上水印,说实话那些照片都是平时活动.party 的生活照片用不着用水印那么夸张,第一次听说给生活照加水印的.没办法,谁让我们和他们有合作项目 ...

最新文章

  1. 11.如何在非固定大小的地图图片上正确渲染ROS小车的位置和运行轨迹
  2. 数字货币 BCH的混币神器CashShuffle
  3. 一部手机失窃引发的惊心动魄的战争,你是个合格的程序猿吗?
  4. 金融系统 mysql,mysql - 适用于CRM,CMS和其他金融系统的RDBMS与NoSQL [已结束]
  5. Xcode 卸载方法
  6. JavaSE各阶段练习题----异常
  7. 数据挖掘之数理统计与描述性统计
  8. 第四周笔记 c++ Boolan
  9. 微软Windows Server 2008认证体系详细介绍
  10. 花书+吴恩达深度学习(二二)自编码器(欠完备,DAE,CAE,PSD)
  11. Angular / RxJs我应该何时退订`Subscription`
  12. HDU1164 Eddy's research I(解法二)
  13. vasp服务器中断,vasp优化结构没提示直接中断
  14. 疯狂采购·四天满世界乱跑·为了新的改变而战
  15. 小红伞杀毒软件(德国的) 完全免费的 FREE
  16. 【数学模型】基于Matlab实现洪水调度运算
  17. 关于ISO 17799 / BS 7799 信息安全管理体系(转载)
  18. 服务机器人分类包括哪些?
  19. AtCoder Beginner Contest 043题解(ABCD)
  20. 蝸居…唯一有共鳴的戲劇

热门文章

  1. 不懂编程可以自学python吗-给初学python的朋友的一些忠告和建议
  2. python基础语法第10关作业-关于一些Python的一些基础语法训练
  3. python爬虫正则表达式实例-python爬虫学习三:python正则表达式
  4. python好学吗 小木虫-25行Python代码完成人脸识别
  5. python使用缩进作为语法边界-python二级备考 day2
  6. 零基础自学python的建议-零基础学python是学2还是3好
  7. python编码规范手册-PEP8 Python 编码规范整理
  8. python与excel的区别-Python比较两个excel文档内容的异同
  9. LeetCode Add Two Numbers
  10. 题目1195:最长最短文本