一、描述:

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

二、思路

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

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

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

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

三、程序实现

java查询数据:

     public String sendQuestion(){
HttpServletRequest request = ServletActionContext.getRequest();
//查询问题相关角色SQL;客服、测试、技术
String sql_role = "select id,name from role where isvalid = true and c_id in (7,8,9)"; Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = BaseDao.getConnection();
st = conn.createStatement();
rs = st.executeQuery(sql_role);
//查询角色表,保存角色id和角色名称
List<Map<String,Object>> list_role = new ArrayList<Map<String,Object>>();
while(rs.next()){
Map<String,Object> data = new HashMap<String, Object>();
data.put("id", rs.getInt("id"));
data.put("name", rs.getString("name"));
list_role.add(data);
}
//声明按角色分组存放用户的map<角色信息,该角色的用户> ;这里似乎应该用TreeMap,但HashMap好像也可以,这个先放一边
Map<Map<String,Object>,List<Map<String,Object>>> map = new HashMap<Map<String,Object>,List<Map<String,Object>>>();
for(int i=0;i<list_role.size();i++){ //遍历角色,并查询每个角色的所有用户
int roleId = (Integer)list_role.get(i).get("c_id");
String sql = "select u.id ,u.name from user u where u.isvalid = true and u.roleid = "+roleId ;
rs = st.executeQuery(sql);
List<Map<String,Object>> users = new ArrayList<Map<String,Object>>();
while(rs.next()){
Map<String,Object> user = new HashMap<String,Object>();
user.put("user_id", rs.getInt("id"));
user.put("user_name", rs.getString("name"));
users.add(user);
}
//分组保存用户
map.put(list_role.get(i), users);
} request.setAttribute("ulist", map); } catch (SQLException e) {
e.printStackTrace();
}finally{
BaseDao.closeResources(st, rs);
} return "selectUsers" ;
}

JSP页面展示处理:

 <a class="wsy_f14 wsy_nomarginright"><span>选择下一节处理人:&nbsp;</span><button type="button" onclick="return queryUsers();" >展开/缩回</button></a>
<div class="wsy_standard_box" id="userDiv" style="display: none;">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<c:forEach items="${ulist }" var="ulist">
<tr>
<th width="8%" align="left" valign="baseline" scope="col">${ulist.key.c_name }</th>
<td width="92%" align="left" valign="baseline" scope="col">
<c:forEach items="${ulist.value }" var="v1">
<span>
<input type="radio" name="quesLogs.next_roleName" onclick="sonCheck('${v1.user_id }')" id="nextUserId"
value="${v1.user_id }_${ulist.key.c_id}" />${v1.user_name }
</span>
</c:forEach>
</td>
</tr>
</c:forEach> </table>
</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集合的使用加深练习,记以笔记,以供温故查询。

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

  1. jsp页面用struts2标签展示List<Object>类型的数据

    今天遇到一个问题,一个List<Object>类型的数据,是直接从sql查出来的数据,要在前端展示,原来的方法不知道为什么不能展示,后来找了好久,找到了一个靠谱的方法,记录一下 <s ...

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

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

  3. jsp页面数据回显(select下拉选择框)

    1.静态变量方式: <!-- 实现select标签回显 --> 1.<select name="curStatus" value="${curStatu ...

  4. ofbiz保存jsp页面数据

    1.前台js保存 <script type="text/javascript" src="/ecloud/js/js/jquery.min.js"> ...

  5. 通用分页jsp页面显示

    注:本章内容都是在上一篇文章 通用分页后台显示:https://www.cnblogs.com/ly-0919/p/11058942.html  的基础上进行改进,所以有许多的类都在上一篇, 带来不便 ...

  6. SpringMVC:前台jsp页面和后台传值

    前台jsp页面和后台传值的几种方式: 不用SpringMVC自带的标签 前台---->后台,通过表单传递数据(): 1.jsp页面代码如下,  modelattribute 有没有都行 < ...

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

    jsp页面通过ajax从后台获取数据,在页面展示,并实现分页效果代码: [JavaScript部分代码] 1 <script> function getComposition(pageno ...

  8. JSTL标签+El表达式把list集合数据展示到 JSP页面

    JSP页面 <%@ page import="cn.itcast.domain.User" %><%@ page import="java.util.L ...

  9. MySQL+Service+Servlet+Jsp实现Table表格分页展示数据

    下面以一个示例讲解如何使用MySQL+Service+Servlet+Jsp实现Table表格分页展示数据: eg:请假管理系统 要求如下: 一.打开首页页面, 访问查询请假记录的 servlet , ...

随机推荐

  1. 通过Oracle补充日志,找到锁阻塞源头的SQL

    问题背景: 有时会考虑一件事情,如果在Oracle环境下出现了锁阻塞的情况,如何定位到SQL源头(通过session.lock.transaction等视图仅能定位到会话)?或许有人会想有没有可能通过 ...

  2. 以短链服务为例,探讨免AppKey、免认证、Ajax跨域调用新浪微博API

    新浪微博的API官方提供了很多种调用方式,支持编程的,归根结底就是两种: 1.基于Oauth协议,使用Open API.(http://open.weibo.com/wiki/%E6%8E%88%E6 ...

  3. LAMP平台搭建菜鸟入门级实验

    LAMP平台搭建(菜鸟入门级) mysql 安装: (1)二进制安装  二进制安装 ,执行解压配置即可.无须执行三布安装. (2)源码编译安装 安装准备工作: (1)查看系统配置:#uname -a/ ...

  4. Java的委托

    http://www.cnblogs.com/soojoe/archive/2012/04/12/2532304.html 委托模式是软件设计模式中的一项基本技巧.在委托模式中,有两个对象参与处理同一 ...

  5. Python(文件、文件夹压缩处理模块,shelve持久化模块,xml处理模块、ConfigParser文档配置模块、hashlib加密模块,subprocess系统交互模块 log模块)

    OS模块 提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname")  改变当前脚本工作目 ...

  6. python学习-day20、装饰器【图片缺失可看】印象笔记博客备份

    前言: 装饰器用于装饰某些函数或者方法,或者类.可以在函数执行之前或者执行之后,执行一些自定义的操作. 1.定义:装饰器就是一个函数,为新定义的函数.把原函数嵌套到新函数里面.以后就可以在执行新函数的 ...

  7. load、init和initialize的区别

    在NSObject.h中找到三个方法 + (void)load; + (void)initialize; - (instancetype)init 1. 可知三个方法类型,两个类方法,一个对象方法 2 ...

  8. php路径目录解析函数dirname basename pathinfo区别及实例

    php获取路径.目录或文件名称,我们经常会使用到dirname().basename().pathinfo()这三个函数,本文章向大家详细介绍这三个函数的区别以及使用实例,需要的朋友可以参考一下. d ...

  9. 关于Reflow回流

    在CSS规范中有一个渲染对象的概念,通常用一个盒子(box, rectangle)来表示.mozilla通过一个叫frame的对象对盒子进行操作.frame主要的动作有三个: 构造frame, 以建立 ...

  10. php判断 !==false

    测试 if($res !== false){ echo "未定义通过<br>"; }else{ echo "未定义不通过<br>"; } ...