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. 学习使用Robot Framework自动化测试框架-web元素定位

    转:http://blog.csdn.net/u012145166/article/details/50342569 1.name和id 其中使用到了name和id定位.但有时候由于开发人员的疏忽或者 ...

  2. 怎样分析java线程堆栈日志

    注: 该文章的原文是由 Tae Jin Gu 编写,原文地址为 How to Analyze Java Thread Dumps 当有障碍,或者是一个基于 JAVA 的 WEB 应用运行的比预期慢的时 ...

  3. 线性判别分析(LDA)准则:FIsher准则、感知机准则、最小二乘(最小均方误差)准则

    准则 采用一种分类形式后,就要采用准则来衡量分类的效果,最好的结果一般出现在准则函数的极值点上,因此将分类器的设计问题转化为求准则函数极值问题,即求准则函数的参数,如线性分类器中的权值向量. 分类器设 ...

  4. 使用 PHP 和 Apache Solr 实现企业搜索

    原文链接:http://www.ibm.com/developerworks/cn/opensource/os-php-apachesolr/   http://blog.csdn.net/hzcyc ...

  5. JS自动格式化输入的数字/千位分隔符VIEW:858

    <script> function cc(s){ if(/[^0-9\.]/.test(s)) return "invalid value"; ss=s.replace ...

  6. C#里List.Sort的用法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace List ...

  7. 下面将详细说明useradd与usermod 的参数及用法!

    下面将详细说明useradd与usermod 的参数及用法! 说到这里要另外两句,关于linux下口令相关的文件存放位置说明/usr/bin/passwd 包含 passwd 命令. /etc/pas ...

  8. Flume-NG中Transaction并发性探究

    我们曾经在Flume-NG中的Channel与Transaction关系(原创)这篇文章中说了channel和Transaction的关系,但是在source和sink中都会使用Transaction ...

  9. explode 和 implode

    <?php $str = "HellooooLAAAAAALleeellll33432ll!"; //字符拆分,当2个“l”并列出现,元素结果是空格“ ”,所有的结果是一维数 ...

  10. spring原理

    1.spring框架什么时候被加载? (1)ApplicationContext ac = new ClassPathXmlApplicationContext("applicationCo ...