热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用c标签的forEach遍历展现数据库主表与从表的数据

首先,数据库有两个表,A表的ID(主键)是B表的外键,A表的一条数据可能对应B表的一条或多条数据,即A1→B1、B2、B3功能需求是将A表的数据与A表对应的B表的数据显示出来,这就需要

首先,数据库有两个表,A表的ID(主键)是B表的外键,A表的一条数据可能对应B表的一条或多条数据,即A1→ B1、B2、B3... 功能需求是将A表的数据与A表对应的B表的数据显示出来,这就需要用到C标签,并且这里需要C标签的套用。

后台通过Map将值传到前台,后台代码如下

 
@RequestMapping("index")
public String turnToPage(HttpServletRequest request){
    //request.setAttribute("list",pcQzShortcutService.getListByPcQzShortcut(null));  List> a=new ArrayList>();
    List shortcuts = pcQzShortcutService.getListByPcQzShortcut(new PcQzShortcut());
    for (PcQzShortcut pcQzShortcut:shortcuts){
        PcQzDetail d = new PcQzDetail();
        d.setPcQzId(pcQzShortcut.getId());
        List details = pcQzDetailService.getListByPcQzDetail(d);
        Map map = new HashMap();
        List l=new ArrayList();
        l.add(pcQzShortcut);
        map.put("zb", l);
        map.put("cb",details);
        a.add(map);
    }
    request.setAttribute("slist",a);
    return "pcQzShortcut/pcQzShortcut";

}
代码讲解:
首先,遍历主表中的所有数据
 
 
List> a=new ArrayList>();
    List shortcuts = pcQzShortcutService.getListByPcQzShortcut(new PcQzShortcut());
其中 PcQzDetail是从表实体类,新建一个从表实体对象,
PcQzDetail d = new PcQzDetail();
将主表的ID塞到新的从表对象里面,
 
 
 
 
for (PcQzShortcut pcQzShortcut:shortcuts){
        PcQzDetail d = new PcQzDetail();
        d.setPcQzId(pcQzShortcut.getId());
然后用List 对象,查出从表中与外键ID相同的数据
 
 
 
 
List details = pcQzDetailService.getListByPcQzDetail(d);
然后用map将主表与从表数据传到前台
 
 
Map map = new HashMap();
        List l=new ArrayList();
        l.add(pcQzShortcut);
        map.put("zb", l);
        map.put("cb",details);
        a.add(map);
将主表与从表对应起来的数据整合一起,传入前台:request.setAttribute("slist",a);
 
 

前台页面代码如下

红色部分:就是后台传入前台的值及c标签的用法

浅绿色部分:获取数据库的字段值

 
 
<div id="tab-2" class="tab-pane active">
    <div class="panel-body">
        <div class="text-left">
            <button type="button" class="btn btn-primary" data-toggle="modal" Onclick="openSaveModal() <%--data-target="#addroad--%>">添加便道button>
        div>
        <c:forEach var="s" items="${slist}" varStatus="statuss">
        <c:forEach var="pcQzShortcut" items="${s.zb}" varStatus="status">
        <div class="jbz-eve" id="pcQzShortcutGrid">
            <div class="ibox-title">
                <h5>便道${statuss.index+1}h5>
                <button type="button" class="btn btn-info" data-toggle="modal" Onclick=getShortcutDetail("${pcQzShortcut.id}") <%--data-target="#myModal2"--%>>编辑button>
                <button type="button" class="btn btn-danger" data-toggle="modal" Onclick=del("${pcQzShortcut.id}","${ctx}/pcQzShortcut/delete.do")>删除button>
            div>
            <div class="ibox-content">
                <ul class="ul-list">
                    <input class="hidden" type="text" value="${pcQzShortcut.id}"/>
                    <li><span class="name">长度:span><em>${pcQzShortcut.length}em>li>
                    <li><span class="name">坡度限值:span><em>${pcQzShortcut.gradient}em>li>
                    <li><span class="name">宽度:span><em>${pcQzShortcut.width}em>li>
                    <li><span class="name">零工数量:span><em>${pcQzShortcut.oddjobNum}em>li>
                    <li><span class="name">设备台班数量:span><em>${pcQzShortcut.facilityNum}em>li>
                    <li><span class="name">砼量:span><em>${pcQzShortcut.proposeNum}em>li>
                    <li><span class="name">标识牌:span><em>${pcQzShortcut.signboard}em>li>
                    <li><span class="name">排水:span><em>${pcQzShortcut.drainage}em>li>
                    <br />
                    <li class="ul-table">
                        <span class="name" color:#008000;background-color:#efefef;">"z-index: 1;">错车平台:span>
                        <div class="col-sm-8" color:#008000;background-color:#efefef;">"margin-left: 200px;">
                            <table class="table table-bordered">
                                <thead>
                                <tr >
                                    <th>#th>
                                    <th>长度th>
                                    <th>宽度th>
                                tr>
                                thead>
                                <tbody>
                                <c:forEach var="pcQzDetail" items="${s.cb}" varStatus="status">
                                <tr>
                                    <input class="hidden" type="text" value="${pcQzDetail.id}"/>
                                    <td>${status.index+1}td>
                                    <td>${pcQzDetail.length}td>
                                    <td>${pcQzDetail.width}td>
                                tr>
                                c:forEach>
                                tbody>
                            table>
                        div>
                    li>
                ul>
                div>
            div>
        c:forEach>
        c:forEach>  div>
div>

//////////////////////讲解///////////////////////////////////////
<c:forEach var="s" items="${slist}" varStatus="statuss"> :                               s.xxx→
获取
此集合中的相关数据
·items:要进行迭代的集合,后台传过来的集合,${slist}是主表与从表的对应数据集合
·var:迭代参数的名称。可通过s.xxx 获取集合中的数据
varStatus:迭代变量的名称,用来表示迭代的状态,可以访问到迭代自身的信息,可以展现数据的条数

 
  
<c:forEach var="pcQzShortcut" items="${s.zb}" varStatus="status">                         s.zb→
主表集合
items="${s.zb}" 
后台传入前台的主表数据集合
 
  
var="pcQzShortcut"
 主表数据迭代参数名称,可以通过pcQzShortcut.xxx 将主表中的属性展现出来
 
  
 
  
<c:forEach var="pcQzDetail" items="${s.cb}" varStatus="status">                           s.cb→
从表集合
后台传入前台的从表数据集合
主表数据迭代参数名称,可以通过
pcQzDetail
.xxx 将主表中的属性展现出来

 
 

展示效果如下:一条主表数据对应多条从表数据,数据库中有多少条就依次循环展现多少条






推荐阅读
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
author-avatar
1056fgv
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有