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递归的实现的更多相关文章

  1. 【Java EE 学习 45】【Hibernate学习第二天】【对象的三种状态】【一对多关系的操作】

    一.对象的三种状态. 1.对象有三种状态:持久化状态.临时状态.脱管状态(游离状态) 2.Session的特定方法能使得一个对象从一个状态转换到另外一个状态. 3.三种状态的说明 (1)临时状态:临时 ...

  2. Mybatis框架中实现双向一对多关系映射

    学习过Hibernate框架的伙伴们很容易就能简单的配置各种映射关系(Hibernate框架的映射关系在我的blogs中也有详细的讲解),但是在Mybatis框架中我们又如何去实现 一对多的关系映射呢 ...

  3. hibernate学习(5)——一对多关系表达

    一对多实现 1. 实现类 package com.alice.hibernate02.vo; import java.util.HashSet; import java.util.Set; publi ...

  4. 菜鸟学习Hibernate——一对多关系映射

    Hibernate中的关系映射,最常见的关系映射之一就是一对多关系映射例如学生与班级的关系,一个班级对应多个学生.如图: Hibernate中如何来映射这两个的关系呢? 下面就为大家讲解一下: 1.创 ...

  5. hibernate一对多关系配置

    一.     表信息 公司表 cId cName cAdress Null Null Null 表t_company 员工表 sId sName sAge cId Null Null Null Nul ...

  6. MyBatis之级联——一对多关系

    上次我们讲到了MyBatis的一对一关系的表示,简单回顾一下一对一关系就是一个学生只有一个学生证.那么什么是一对多关系呢?一个学生有多个课程这就是一对多的关系.我们结合上一章中的学生和学生证,在此基础 ...

  7. hibernate框架学习笔记8:一对多关系案例

    两个实体类:客户与联系人,一个客户可以有多个联系人 客户类: package domain; import java.util.HashSet; import java.util.Set; //客户实 ...

  8. JAVA记录-JSP内容

    JSP(JavaServer Pages )是什么? JavaServer Pages(JSP)是一种支持动态内容开发的网页技术它可以帮助开发人员通过利用特殊的JSP标签,其中大部分以<%开始并 ...

  9. 【笔试题】Java 中如何递归显示一个目录下面的所有目录和文件?

    笔试题 Java 中如何递归显示一个目录下面的所有目录和文件? import java.io.File; public class Test { private static void showDir ...

随机推荐

  1. BZOJ-1061 志愿者招募 线性规划转最小费用最大流+数学模型 建模

    本来一眼建模,以为傻逼题,然后发现自己傻逼...根本没想到神奇的数学模型..... 1061: [Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 ...

  2. POJ-1273 Drainage Ditches 最大流Dinic

    Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 65146 Accepted: 25112 De ...

  3. 【codevs1200】 NOIP2012—同余方程

    codevs.cn/problem/1200/ (题目链接) 题意 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. Solution 这道题其实就是求${a~mod~b}$的逆元 ...

  4. 求一元二次方程ax^2+bx+c=0的解

    Console.WriteLine("求解方程ax^2+bx+c=0的解."); Console.WriteLine("请分别输入a,b,c的值(注意每输入一个值按一下回 ...

  5. sprintf

    功能:将数据格式化到字符串中 原型:int sprintf( char *buffer, const char *format, [ argument] … );返回值是这个字符串的长度 上次我企图这 ...

  6. 检验php用时

    <?php// 实例1 /** * @start time */function proStartTime() { global $startTime; $mtime1 = explode(&q ...

  7. Hibernate动态更新

    Hibernate一级缓存: Hibernate有一级和二级缓存.一级缓存就是Session. 在Hibernate启动的时候,SessionFactory解析映射文件的时候,会根据映射文件中的字段生 ...

  8. Jquery 表单操作

    文本框,文本区域: 获取值: 1.$("#txt").attr("value"); 2. $("txt").val(); 单选按钮: 获取值 ...

  9. ps 倒影制作

    首先打开PS并打开一张素材,这里我选择了山水图片,制作山峰在水中的倒影效果.   然后按下[Crrl+J]复制这个图层,如图:   接着按下[Ctrl+T]或者是[编辑][自由变换],打开[自由变换] ...

  10. [Angularjs]ng-file-upload上传文件

    写在前面 最近在弄文档库的H5版,就查找了下相关的上传组件,发现了ng-upload的东东,推荐给大家. 系列文章 [Angularjs]ng-select和ng-options [Angularjs ...