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. word中打出希腊字母

    作为一个键盘党,不喜欢用鼠标去选择希腊字母,希望只用键盘就能在word中打出希腊字母. 方法是:按照下图所示对应表,先输入英文字母,然后选中它并按Ctrl+Shift+Q

  2. BZOJ2186 欧拉函数

    欧拉函数:一般记作φ(n),表示1-n中与n互质的数的数量. 欧拉函数是积性函数,即φ(m*n)=φ(m)*φ(n) //这条定理基友面试时还遇到了= = 欧拉函数的值φ(n)=n*(1-p[1])* ...

  3. WWDC2014总结---For产品经理们

    一年一度的苹果开发者大会WWDC2014,在北京时间6月3日凌晨1点开始了,苹果发布了iOS8.OSX10.10等,苹果比以前更加开放了,网上东西很多很杂,但缺少从产品开发角度来梳理的文章. 我根据这 ...

  4. ActivityInfo taskAffinity

    通常在Manifest里面使用 <application android:icon="@drawable/icon" android:label="@string/ ...

  5. PHP时间比较和时间差如何计算

    1.<?php 2. $zero1=date(“y-m-d h:i:s”); 3. $zero2=”2010-11-29 21:07:00′; 4. echo “zero1的时间为:”.$zer ...

  6. 微信公众平台开发接口PHP SDK完整版

    <?php /* 方倍工作室 http://www.fangbei.org/ CopyRight 2015 All Rights Reserved */ define("TOKEN&q ...

  7. hdu 2199 Can you solve this equation?

    #include<stdio.h> #include<math.h> double f(double x) { return 8*x*x*x*x+7*x*x*x+2*x*x+3 ...

  8. bootstrap-select搜索框输入中文

    bootstrap-select 的搜索框无法输入中文,解决办法: 删除源码中这两行代码 that.$lis.not('.hidden, .divider, .dropdown-header').eq ...

  9. LVS-DR工作原理

    我们都知道LVS有LVS-DR,LVS-NAT,LVS-TUN三种模式,其中DR模式意为Direct Routing(直接路由).对于LVS-DR,你到底了解到什么程度?本文通过一个实例场景,详细介绍 ...

  10. DataGridView设置不自动显示数据库中未绑定的列

    项目中将从数据库查出来的数据绑定到DataGridView,但是不想显示所有的字段.此功能可以通过sql语句控制查出来的字段数目,但是DataGridView有属性可以控制不显示未绑定的数据,从UI层 ...