JSP页面数据展示:分组数据展示

一、描述:

页面上要展示的数据只要写好sql从数据库查出来即可,但是展示有时候不是太好处理。比如工作中遇到的这种情况:有一个问题处理的流程,其中需要选择下一处理人,这些处理人要以部门的形式分组展示,实现如下图所示的效果:

二、思路

因为是小项目,项目只使用了strut框架,数据库使用普通的JDBC通过C3P0连接数据库;

a)首先按角色分组查询出所有用户,每个角色的用户存到List里面;

b)然后把每组角色放到一个Map里面去,这样可以通过角色获取到对应角色用户的List;

c)JSP页面上通过JSTL标签的foreach标签将结果显示出来;

三、程序实现

java查询数据:

 1     public String sendQuestion(){
 2         HttpServletRequest request = ServletActionContext.getRequest();
 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;
 9         try {
10             conn = BaseDao.getConnection();
11             st = conn.createStatement();
12             rs = st.executeQuery(sql_role);
13             //查询角色表,保存角色id和角色名称
14             List<Map<String,Object>> list_role = new ArrayList<Map<String,Object>>();
15             while(rs.next()){
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>>>();
23             for(int i=0;i<list_role.size();i++){ //遍历角色,并查询每个角色的所有用户
24                 int roleId = (Integer)list_role.get(i).get("c_id");
25                 String sql = "select u.id ,u.name  from user u where u.isvalid = true and u.roleid = "+roleId ;
26                 rs = st.executeQuery(sql);
27                 List<Map<String,Object>> users  = new ArrayList<Map<String,Object>>();
28                 while(rs.next()){
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(list_role.get(i), users);
36             }
37
38             request.setAttribute("ulist", map);
39
40         } catch (SQLException e) {
41             e.printStackTrace();
42         }finally{
43             BaseDao.closeResources(st, rs);
44         }
45
46         return "selectUsers" ;
47     }

JSP页面展示处理:

 1 <a class="wsy_f14 wsy_nomarginright"><span>选择下一节处理人:&nbsp;</span><button type="button" onclick="return queryUsers();" >展开/缩回</button></a>
 2     <div class="wsy_standard_box" id="userDiv" style="display: none;">
 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="quesLogs.next_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=‘quesLogs.next_roleName‘]:checked").val() ;
    if(dealUser==null || dealUser==‘‘){
        alert(‘请选择下一处理人!‘);
        return false;
    }

    document.getElementById("saveForm").submit();
}

结束语:

以上实现方式可能不是最好的一种,主要是为页面分组展示数据提供了一种方法,另外也对Map,List集合的使用加深练习,记以笔记,以供温故查询。

时间: 2024-10-15 03:45:25

JSP页面数据展示:分组数据展示的相关文章

关于界面的按钮的显隐 还有jsp页面数据的传递 把页面的标签变成只读

//界面按钮的显示隐藏 界面input的锁定    function change(){       document.getElementById('first1').style.display="inline";       document.getElementById('first2').style.display="inline";       document.getElementById('first3').style.display="in

【知了堂学习笔记】JSP页面数据分页实现(一)——分页概念以及主流数据库的分页查询

一.分页简介 1.分页,就是一种将数据库里的数据一部分展示给用户的技术.为什么要这样做呢?因为一般来说用户在查询时数据是非常多的,当一个页面不能显示所有数据时,我们就要对查询的数据进行分页,就像我们的书本分成一页一页一样.最简单的例子就是百度,当你百度时,成千上万的数据,并不是呈现在一个页面的. 2.分页的实现方式 1)假分页(不推荐):什么是假分页呢?假分页就是一次性将数据库里的数据全部取出来,存储在页面中,然后再将数据分别展示出来.这种假分页在数据少的还可以玩玩,当数据多起来的时候,这种方式

jsp页面数据分页模仿百度分页效果

<%@page import="web09.shop.DBUtil"%> <%@page import="java.sql.ResultSet"%> <%@page import="java.sql.PreparedStatement"%> <%@page import="java.sql.Connection"%> <%@ page language="java

jsp页面通过ajax取值/展示数据及分页显示

jsp页面通过ajax从后台获取数据,在页面展示,并实现分页效果代码: [JavaScript部分代码] 1 <script> 2 function getComposition(pageno){ 3 4 //alert(pageno); 5 $.ajax( 6 { 7 url:'<%=basePath%>composition/compositionlist', 8 type:'post', 9 data:"pageno="+pageno, 10 succes

jsp页面加载出错或者datagrid有数据但页面不展示

(一) Uncaught SyntaxError: Invalid or unexpected token                                VM4337:2 at new Function () at Object.parseOptions (jquery.easyui.min.js:58) at Function.$.fn.linkbutton.parseOptions (jquery.easyui.min.js:1004) at HTMLAnchorElemen

关于html5与jsp页面同样的html代码展示的页面效果不一样的问题

1 private void Ws_NewMessageReceived(WebSocketSession session, string value) 2 { 3 Dictionary<string, string> res = login(value, session, this) as Dictionary<string, string>; 4 switch (res["send"]) 5 { 6 case "0": 7 res.Rem

jsp页面 列表 展示 ajax异步实现

1. 服务端先返回页面基本结构(如message.jsp), <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ tag

微信小程序结合后台数据管理实现商品数据的动态展示、维护

微信小程序给我们提供了一个很好的开发平台,可以用于展现各种数据和实现丰富的功能,本篇随笔介绍微信小程序结合后台数据管理实现商品数据的动态展示.维护,介绍如何实现商品数据在后台管理系统中的维护管理,并通过小程序的请求Web API 平台获取JSON数据在小程序界面上进行动态展示. 1.整体性的架构设计 我们整体性的架构设计,包含一个Web管理后台.一个Web API统一接口层.当然还有数据库什么,另外还有一个小程序客户端.整个架构体系还是以我之前随笔介绍的<整合微信小程序的Web API接口层的架

分页数据的新展示方式---瀑布流

最近老大让我做一个js效果,要求页面开始展示(比方说40条数据),当鼠标滚动到页面底部时,再加载后面的数据.开始没有半点头绪,想到过jQuery插件,但是也没怎么用起来,还是自己写吧:可以肯定的一条思路是:当滚动页面底部时,肯定是去加载下一页的数据了,这个时候页面应该没有刷新的操作,所以想到了异步Ajax. 代码部分,首先在SQL server中写了一个存储过程, ALTER proc [dbo].[proc_Nav]@pageSize int,