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 ...
随机推荐
- codevs1225 八数码难题
题目描述 Description Yours和zero在研究A*启发式算法.拿到一道经典的A*问题,但是他们不会做,请你帮他们.问题描述 在 3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数 ...
- Dinic 算法
#include <bits/stdc++.h> using namespace std; ), M(1e5+); int head[N]; struct Edge{ /* r: resi ...
- PHP局部变量与全局变量
一.局部变量定义:在函数内部声明,且只能在函数内部调用的变量. 注意:参数也是局部变量的一种. demo1:1 function demo1(){2 $age = 10;3 }4 5 echo ...
- javaweb学习总结(二十九)——EL表达式
一.EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数 ...
- --hdu 1231 最大连续子序列(动态规划)
AC code: #include<stdio.h> int a[100005]; int main(void) { int n,i; int sum,maxn,tem,s,e,flag; ...
- Redis 数据库
Redis 服务器 Remote Dictionay Server Redis是一个key-value持久化产品,通常被称为数据结构服务器. Redis的key是string类型: ...
- [Angularjs]ng-switch用法
用法描述 ng-switch根据表达式的值显示或这隐藏对应部分.类似c#或者其他预览里面的switch用法.可以慢慢体会. 说道ng-switch就要说到子元素该怎么根据当前值进行变化.子元素可以通过 ...
- linux 的useradd 命令的p选项
linux 的useradd 命令的p选项 错误用法: #useradd gaojian -p gaojian # ...
- Who Gets the Most Candies?(线段树 + 反素数 )
Who Gets the Most Candies? Time Limit:5000MS Memory Limit:131072KB 64bit IO Format:%I64d &am ...
- 淘宝(阿里百川)手机客户端开发日记第六篇 Service详解(四)
DEMO1:在Activity里声明一个回调方法,当service完成任务后,调用这个回调方法. 首先,我们先继承service,来创建服务,代码如下: package com.example.ser ...