JSP页⾯数据展⽰:分组数据展⽰
⼀、描述:
页⾯上要展⽰的数据只要写好sql从数据库查出来即可,但是展⽰有时候不是太好处理。⽐如⼯作中遇到的这种情况:有⼀个问题处理的流程,其中需要选择下⼀处理⼈,这些处理⼈要以部门的形式分组展⽰,实现如下图所⽰的效果:
⼆、思路
因为是⼩项⽬,项⽬只使⽤了strut框架,数据库使⽤普通的JDBC通过C3P0连接数据库;
a)⾸先按⾓⾊分组查询出所有⽤户,每个⾓⾊的⽤户存到List⾥⾯;
b)然后把每组⾓⾊放到⼀个Map⾥⾯去,这样可以通过⾓⾊获取到对应⾓⾊⽤户的List;
c)JSP页⾯上通过JSTL标签的foreach标签将结果显⽰出来;
三、程序实现
java查询数据:
1public String sendQuestion(){
2 HttpServletRequest request = Request();
3//查询问题相关⾓⾊SQL;客服、测试、技术
4 String sql_role = "select id,name from role where isvalid = true and c_id in (7,8,9)";
5
6 Connection conn = null;
7 Statement st = null;
8 ResultSet rs = null;
9try {
10 conn = Connection();
11 st = ateStatement();
12 rs = st.executeQuery(sql_role);
13//查询⾓⾊表,保存⾓⾊id和⾓⾊名称
14 List<Map<String,Object>> list_role = new ArrayList<Map<String,Object>>();
()){
16 Map<String,Object> data = new HashMap<String, Object>();
17 data.put("id", rs.getInt("id"));
18 data.put("name", rs.getString("name"));
19 list_role.add(data);
20 }
21//声明按⾓⾊分组存放⽤户的map<⾓⾊信息,该⾓⾊的⽤户> ;这⾥似乎应该⽤TreeMap,但HashMap好像也可以,这个先放⼀边
22 Map<Map<String,Object>,List<Map<String,Object>>> map = new HashMap<Map<String,Object>,List<Map<String,Object>>>();
23for(int i=0;i<list_role.size();i++){ //遍历⾓⾊,并查询每个⾓⾊的所有⽤户
24int roleId = (Integer)(i).get("c_id");
25 String sql = "select u.id ,u.name from user u where u.isvalid = true leid = "+roleI
d ;
26 rs = st.executeQuery(sql);
27 List<Map<String,Object>> users = new ArrayList<Map<String,Object>>();
()){
29 Map<String,Object> user = new HashMap<String,Object>();
30 user.put("user_id", rs.getInt("id"));
31 user.put("user_name", rs.getString("name"));
32 users.add(user);
33 }
34//分组保存⽤户
35 map.put((i), users);
36 }
37
resultset 遍历38 request.setAttribute("ulist", map);
39
40 } catch (SQLException e) {
41 e.printStackTrace();
42 }finally{
43 BaseDao.closeResources(st, rs);
44 }
45
46return "selectUsers" ;
47 }
JSP页⾯展⽰处理:
1<a class="wsy_f14 wsy_nomarginright"><span>选择下⼀节处理⼈: </span><button type="button" onclick="return queryUsers();">展开/缩回</button></a> 2<div class="wsy_standard_box" id="userDiv" >
3<table width="100%" border="0" cellspacing="0" cellpadding="0">
4<c:forEach items="${ulist }" var="ulist">
5<tr>
6<th width="8%" align="left" valign="baseline" scope="col">${ulist.key.c_name }</th>
7<td width="92%" align="left" valign="baseline" scope="col">
8<c:forEach items="${ulist.value }" var="v1">
9<span>
10<input type="radio" name="_roleName" onclick="sonCheck('${v1.user_id }')" id="nextUserId"
11 value="${v1.user_id }_${ulist.key.c_id}"/>${v1.user_name }
12</span>
13</c:forEach>
14</td>
15</tr>
16</c:forEach>
17
18</table>
19</div>
JS:
function queryUsers(){
//展开、隐藏选⼈DIV
$("#userDiv").fadeToggle("slow");
return false ;
}
//提交表单时验证数据JS
function saveMediaMap() {
//获取单选框的值
var dealUser = $("input[name='_roleName']:checked").val() ;
if(dealUser==null || dealUser==''){
alert('请选择下⼀处理⼈!');
return false;
}
}
结束语:
以上实现⽅式可能不是最好的⼀种,主要是为页⾯分组展⽰数据提供了⼀种⽅法,另外也对Map,List集合的使⽤加深练习,记以笔记,以供温故查询。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论