springJDBC一对多关系,以及Java递归,jsp递归的实现
maven编译,springMVC+spring+springJDBC框架。
要实现的功能是一个文件夹下,可能显示n个文件夹,每个文件夹下又可能显示n个文件夹。。。。
前台效果:
controller中的方法如下:
@RequestMapping(value="/index",method=RequestMethod.GET)
public String getIndex(HttpServletRequest request,@RequestParam(required=false) Integer isHidden){
if(isHidden==null) isHidden = 1;//1 showHidden
request.setAttribute("list", cwInfoService.getAllCwInfo(isHidden));
return "/jsp/coursewareSelectAll";
}
pojo类如下:
package org.sakaiproject.courseware.pojo;
import java.util.Date;
import java.util.List;
/**
* 描述:课件信息
* @author Promise
* Date:2015-08-04
*/
public class CwInfo {
/**主键*/
private Integer cwId;
/**课件名称*/
private String cwName;
/**课件路径*/
private String cwPath;
/**创建人*/
private String createUser;
/**创建时间*/
private Date createTime;
/**修改时间*/
private Date updateTime;
/**修改人*/
private String updateUser;
/**父级编号*/
private Integer parentId;
/**工具编号*/
private String toolId;
/**课件描述*/
private String cwContent;
/**是否隐藏 0隐藏 1显示*/
private Integer isHidden;
/**包含有cwinfo对象的集合*/
private List<CwInfo> cwInfo; //重点是我添加了一个属性,用于存放子课件信息的parentId等于父课件信息的cwId用的集合
public List<CwInfo> getCwInfo() {
return cwInfo;
}
public void setCwInfo(List<CwInfo> cwInfo) {
this.cwInfo = cwInfo;
}
public Integer getIsHidden() {
return isHidden;
}
public void setIsHidden(Integer isHidden) {
this.isHidden = isHidden;
}
public Integer getCwId() {
return cwId;
}
public void setCwId(Integer cwId) {
this.cwId = cwId;
}
public String getCwName() {
return cwName;
}
public void setCwName(String cwName) {
this.cwName = cwName;
}
public String getCwPath() {
return cwPath;
}
public void setCwPath(String cwPath) {
this.cwPath = cwPath;
}
public String getCreateUser() {
return createUser;
}
public void setCreateUser(String createUser) {
this.createUser = createUser;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public String getUpdateUser() {
return updateUser;
}
public void setUpdateUser(String updateUser) {
this.updateUser = updateUser;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public String getToolId() {
return toolId;
}
public void setToolId(String toolId) {
this.toolId = toolId;
}
public String getCwContent() {
return cwContent;
}
public void setCwContent(String cwContent) {
this.cwContent = cwContent;
}
}
dao中,我用springJDBC操作数据库如下:
package org.sakaiproject.courseware.dao.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.sakaiproject.courseware.dao.CwInfoDao;
import org.sakaiproject.courseware.pojo.CwInfo;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@Repository
public class CwInfoDaoImpl implements CwInfoDao {
@Resource(name="jdbcTemplate")
private JdbcTemplate jdbcTemplate;
@SuppressWarnings("unchecked")
public List<CwInfo> findCwInfo(Integer cwId,Integer isHidden){
String sql = "select * from cw_info where parent_id="+cwId;
if(isHidden==1) sql=sql+" and is_hidden="+isHidden;
List<CwInfo> list = jdbcTemplate.query(sql, new cwMapper());
for (int i = 0; i < list.size(); i++) {
List<CwInfo> cwList = this.findCwInfo(list.get(i).getCwId(),isHidden); //这里实现了查询的递归方法
list.get(i).setCwInfo(cwList);
}
return list;
}
@Override
@SuppressWarnings("unchecked")
public List<CwInfo> getAllCwInfo(Integer isHidden){
String sql = "select * from cw_info where parent_id=0";
if(isHidden==1) sql=sql+" and is_hidden="+isHidden;
List<CwInfo> countList = jdbcTemplate.query(sql,new cwMapper());
for (int i = 0; i < countList.size(); i++) {
List<CwInfo> cwList = this.findCwInfo(countList.get(i).getCwId(),isHidden);
countList.get(i).setCwInfo(cwList);
}
return countList;
}
class cwMapper implements RowMapper { //springJDBC要实现的类,查询用的
@Override
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
CwInfo cw = new CwInfo();
cw.setCreateTime(rs.getDate("create_time"));
cw.setCreateUser(rs.getString("create_user"));
cw.setCwContent(rs.getString("cw_content"));
cw.setCwId(rs.getInt("cw_id"));
cw.setCwName(rs.getString("cw_name"));
cw.setCwPath(rs.getString("cw_path"));
cw.setParentId(rs.getInt("parent_id"));
cw.setToolId(rs.getString("tool_id"));
cw.setUpdateTime(rs.getDate("update_time"));
cw.setUpdateUser(rs.getString("update_user"));
cw.setIsHidden(rs.getInt("is_hidden"));
return cw;
}
}
前台jsp页面,我用的是一个jsp页面,嵌套另一个jsp页面,如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div name="spreadContent">
<c:forEach items="${list.cwInfo }" var="list">
<tr class="odd">
<td headers="expansion">
${list.cwName }
</td>
</tr>
<c:if test="${not empty list.cwInfo }">
<c:set var="list" value="${list.cwInfo}" scope="request" /> //传参用这种方式传递
<c:import url="courseContent.jsp" /> //重点是这里包含本页面,本页面就叫做courseContent.jsp,这是递归jsp页面
</c:if>
</c:forEach>
</div>
主要的jsp页面如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<body>
<table>
<div id="content-content">
<c:if test="${not empty list }">
<c:forEach items="${list }" var="list">
<tr class="odd">
<td headers="checkboxes">
${list.cwName }
</td>
</tr>
<c:if test="${not empty list.cwInfo }">
<c:set var="list" value="${list.cwInfo}" scope="request" /> //传参用这种方式传递
<c:import url="courseContent.jsp" /> //重点是这里调用了jsp的递归jsp方法
</c:if>
</c:forEach>
</c:if>
</div>
</c:forEach>
</c:if>
</div>
</table>
</form>
</div>
</body>
<script type="text/javascript" src="/library/js/jquery/jquery-1.9.1.min.js">
</script>
</html>
springJDBC一对多关系,以及Java递归,jsp递归的实现的更多相关文章
- 【Java EE 学习 45】【Hibernate学习第二天】【对象的三种状态】【一对多关系的操作】
一.对象的三种状态. 1.对象有三种状态:持久化状态.临时状态.脱管状态(游离状态) 2.Session的特定方法能使得一个对象从一个状态转换到另外一个状态. 3.三种状态的说明 (1)临时状态:临时 ...
- Mybatis框架中实现双向一对多关系映射
学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...
- hibernate学习(5)——一对多关系表达
一对多实现 1. 实现类 package com.alice.hibernate02.vo; import java.util.HashSet; import java.util.Set; publi ...
- 菜鸟学习Hibernate——一对多关系映射
Hibernate中的关系映射,最常见的关系映射之一就是一对多关系映射例如学生与班级的关系,一个班级对应多个学生.如图: Hibernate中如何来映射这两个的关系呢? 下面就为大家讲解一下: 1.创 ...
- hibernate一对多关系配置
一. 表信息 公司表 cId cName cAdress Null Null Null 表t_company 员工表 sId sName sAge cId Null Null Null Nul ...
- MyBatis之级联——一对多关系
上次我们讲到了MyBatis的一对一关系的表示,简单回顾一下一对一关系就是一个学生只有一个学生证.那么什么是一对多关系呢?一个学生有多个课程这就是一对多的关系.我们结合上一章中的学生和学生证,在此基础 ...
- hibernate框架学习笔记8:一对多关系案例
两个实体类:客户与联系人,一个客户可以有多个联系人 客户类: package domain; import java.util.HashSet; import java.util.Set; //客户实 ...
- JAVA记录-JSP内容
JSP(JavaServer Pages )是什么? JavaServer Pages(JSP)是一种支持动态内容开发的网页技术它可以帮助开发人员通过利用特殊的JSP标签,其中大部分以<%开始并 ...
- 【笔试题】Java 中如何递归显示一个目录下面的所有目录和文件?
笔试题 Java 中如何递归显示一个目录下面的所有目录和文件? import java.io.File; public class Test { private static void showDir ...
随机推荐
- 萤火虫算法-python实现
FAIndividual.py import numpy as np import ObjFunction class FAIndividual: ''' individual of firefly ...
- NOIP2013 货车运输 (最大生成树+树上倍增LCA)
死磕一道题,中间发现倍增还是掌握的不熟 ,而且深刻理解:SB错误毁一生,憋了近2个小时才调对,不过还好一遍AC省了更多的事,不然我一定会疯掉的... 3287 货车运输 2013年NOIP全国联赛提高 ...
- 【bzoj2819】 Nim
www.lydsy.com/JudgeOnline/problem.php?id=2819 (题目链接) 题意 动态树上路径异或和. Solution Nim取石子游戏的sg值就是每堆石子的异或和,所 ...
- codeforces 288A:Polo the Penguin and Strings
Description Little penguin Polo adores strings. But most of all he adores strings of length n. One d ...
- android选择时间攻略
安卓开发过程中难免会碰到需要选择日期时间的情况,由于大部分android初级教程都没教怎么选择时间,初学者碰到这种难免会有些不知所措,难道要让用户自己输入日期时间?先不说用户体验不好,处理用户输入各式 ...
- NYOJ298点的转换(矩阵十大问题之一)
点的变换 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 平面上有不超过10000个点,坐标都是已知的,现在可能对所有的点做以下几种操作: 平移一定距离(M),相对X ...
- leach协议matlab仿真代码
http://www.ilovematlab.cn/thread-177006-1-1.html LEACH協議clear;%清除內存變量 xm=100;%x軸範圍ym=100;%y軸範圍 sink. ...
- easyui datagrid使用
http://www.cnblogs.com/zgqys1980/archive/2011/01/04/1925775.html 加载相关js和css,因为easyui依赖jquery,所有加载eas ...
- 过滤器在Web开发应用------解决中文乱码
src/com/Encoding.java package com; import java.io.IOException; import javax.servlet.Filter; import j ...
- ASP+ACCESS手工注入详解
SQL注入这么长时间,看见有的朋友还是不会手工注入,那么我来演示一下.高手略过. 我们大家知道,一般注入产生在没经过虑的变量上,像ID?=XX这样的. 下面以这个网址为例: http://zsb.xx ...