当前位置:编程学习 > JAVA >>

SSH下的组合批量增加

项目中有如下需求。可能考虑到比较实用,因此特写下此文,仅供参考。
页面结构大致介绍如下:
下图是一个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. 
6.     public void setEventSelects(String[] eventSelects) { 
7.         this.eventSelects = eventSelects; 
8.     }

③Action代码如下:
 
1. public String saveEventBatch() throws Exception { 
2.         try { 
3. 
4.             HttpServletRequest request = ServletActionContext.getRequest(); 
5.              
6.             eventSelects = request.getParameterValues("eventSelects"); 
7.             Map session = ActionContext.getContext().getSession(); 
8.             String userId = session.get("userId").toString(); 
9.             for (int i = 0; i < eventSelects.length; i++) { 
10.                 event = new Event(); 
11.                 String a = new String(eventSelects[i].getBytes("iso-8859-1"),"UTF-8"); 
12.                 event.setName(a+eventSelects[i+1]); 
13.                 event.setRace(eventSelects[i+2]); 
14.                 event.setGroupTime(Long.parseLong(eventSelects[i+3])); 
15.                 event.setTrackPriority(eventSelects[i+4]);  
16.                 i+=4; 
17.                 event.setUserId(Long.parseLong(userId)); 
18.                 this.eventService.saveEvent(event); 
19. 
20.             } 
21.              
22. 
23.         } catch (Exception e) { 
24.             // TODO: handle exception 
25.             e.printStackTrace(); 
26.             return INPUT; 
27.         } 
28.         return SUCCESS; 
29.     } 
其中需要注意的是,第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. 
6.     public Event getEvent() { 
7.         return event; 
8.     }
,然后页面 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开始的,如果没此条语句,则可能会报错,因为,把数组里面的值存错位置了。

 

摘自 幽灵柯南的技术blog
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,