使用c标签的forEach遍历展现数据库主表与从表的数据
2016-12-27 10:11
218 查看
首先,数据库有两个表,A表的ID(主键)是B表的外键,A表的一条数据可能对应B表的一条或多条数据,即A1→B1、B2、B3...功能需求是将A表的数据与A表对应的B表的数据显示出来,这就需要用到C标签,并且这里需要C标签的套用。后台通过Map将值传到前台,后台代码如下:
@RequestMapping("index")publicStringturnToPage(HttpServletRequestrequest){//request.setAttribute("list",pcQzShortcutService.getListByPcQzShortcut(null));List<Map<String,List>>a=newArrayList<Map<String,List>>();List<PcQzShortcut>shortcuts=pcQzShortcutService.getListByPcQzShortcut(newPcQzShortcut());for(PcQzShortcutpcQzShortcut:shortcuts){PcQzDetaild=newPcQzDetail();d.setPcQzId(pcQzShortcut.getId());List<PcQzDetail>details=pcQzDetailService.getListByPcQzDetail(d);Map<String,List>map=newHashMap<String,List>();Listl=newArrayList();l.add(pcQzShortcut);map.put("zb",l);map.put("cb",details);a.add(map);}request.setAttribute("slist",a);return"pcQzShortcut/pcQzShortcut";}
代码讲解:
首先,遍历主表中的所有数据
List<Map<String,List>>a=newArrayList<Map<String,List>>();List<PcQzShortcut>shortcuts=pcQzShortcutService.getListByPcQzShortcut(newPcQzShortcut());
其中PcQzDetail是从表实体类,新建一个从表实体对象,
PcQzDetaild=newPcQzDetail();将主表的ID塞到新的从表对象里面,
for(PcQzShortcutpcQzShortcut:shortcuts){PcQzDetaild=newPcQzDetail();d.setPcQzId(pcQzShortcut.getId());
然后用List对象,查出从表中与外键ID相同的数据
List<PcQzDetail>details=pcQzDetailService.getListByPcQzDetail(d);然后用map将主表与从表数据传到前台
Map<String,List>map=newHashMap<String,List>();Listl=newArrayList();l.add(pcQzShortcut);map.put("zb",l);map.put("cb",details);a.add(map);
将主表与从表对应起来的数据整合一起,传入前台:request.setAttribute("slist",a);
前台页面代码如下
红色部分:就是后台传入前台的值及c标签的用法
浅绿色部分:获取数据库的字段值<divid="tab-2"class="tab-paneactive"><divclass="panel-body"><divclass="text-left"><buttontype="button"class="btnbtn-primary"data-toggle="modal"onclick="openSaveModal()<%--data-target="#addroad--%>">添加便道</button></div><c:forEachvar="s"items="${slist}"varStatus="statuss"><c:forEachvar="pcQzShortcut"items="${s.zb}"varStatus="status"><divclass="jbz-eve"id="pcQzShortcutGrid"><divclass="ibox-title"><h5>便道${statuss.index+1}</h5><buttontype="button"class="btnbtn-info"data-toggle="modal"onclick=getShortcutDetail("${pcQzShortcut.id}")<%--data-target="#myModal2"--%>>编辑</button><buttontype="button"class="btnbtn-danger"data-toggle="modal"onclick=del("${pcQzShortcut.id}","${ctx}/pcQzShortcut/delete.do")>删除</button></div><divclass="ibox-content"><ulclass="ul-list"><inputclass="hidden"type="text"value="${pcQzShortcut.id}"/><li><spanclass="name">长度:</span><em>${pcQzShortcut.length}</em></li><li><spanclass="name">坡度限值:</span><em>${pcQzShortcut.gradient}</em></li><li><spanclass="name">宽度:</span><em>${pcQzShortcut.width}</em></li><li><spanclass="name">零工数量:</span><em>${pcQzShortcut.oddjobNum}</em></li><li><spanclass="name">设备台班数量:</span><em>${pcQzShortcut.facilityNum}</em></li><li><spanclass="name">砼量:</span><em>${pcQzShortcut.proposeNum}</em></li><li><spanclass="name">标识牌:</span><em>${pcQzShortcut.signboard}</em></li><li><spanclass="name">排水:</span><em>${pcQzShortcut.drainage}</em></li><br/><liclass="ul-table"><spanclass="name"style="z-index:1;">错车平台:</span><divclass="col-sm-8"style="margin-left:200px;"><tableclass="tabletable-bordered"><thead><tr><th>#</th><th>长度</th><th>宽度</th></tr></thead><tbody><c:forEachvar="pcQzDetail"items="${s.cb}"varStatus="status"><tr><inputclass="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:forEachvar="s"items="${slist}"varStatus="statuss">:s.xxx→
获取
此集合中的相关数据
·items:要进行迭代的集合,后台传过来的集合,${slist}是主表与从表的对应数据集合
·var:迭代参数的名称。可通过s.xxx获取集合中的数据
varStatus:迭代变量的名称,用来表示迭代的状态,可以访问到迭代自身的信息,可以展现数据的条数
<c:forEachvar="pcQzShortcut"items="${s.zb}"varStatus="status">s.zb→主表集合
items="${s.zb}"
后台传入前台的主表数据集合
var="pcQzShortcut"
主表数据迭代参数名称,可以通过pcQzShortcut.xxx将主表中的属性展现出来
<c:forEachvar="pcQzDetail"items="${s.cb}"varStatus="status">s.cb→从表集合
后台传入前台的从表数据集合
主表数据迭代参数名称,可以通过
pcQzDetail
.xxx将主表中的属性展现出来展示效果如下:一条主表数据对应多条从表数据,数据库中有多少条就依次循环展现多少条
相关文章推荐
- 如何使用c标签将数据库数据用forEach依次展现出来
- Spring MVC使用jstl 标签c:forEach 遍历输出双层嵌套List的数据
- 错误笔记(一)- XXX is not mapped [from XXX](ssh框架下,使用strust2标签显示数据库数据)
- jstl <c:foreach>标签进行数据遍历
- jstl使用foreach 循环遍历输出表格和数据
- 【数据库_Mysql】<foreach>标签在Mysql中的使用
- 使用所见即所得文本编辑器编辑文本存入数据库后通过ajax获取服务器json_encode的数据到前台,文本内容上边的html标签不解析
- 关于在jsp中使用forEach标签取list中的数据却取不到数据的问题
- Asp.net使用Table标签填充数据库数据
- JSP中使用<c:forEach>标签循环遍历元素
- 关于UEditor插件的使用以及UEditor数据回显问题,数据库存储标签代码前台页面如何解析问题小结
- MySql 使用foreach标签 批量插入list中数据,主键自增,插入
- ThinkPHP 中 M 方法查询数据库最后使用 find() 导致返回结果集 foreach 数据不对的问题
- 使用<s:iterator>标签来循环遍历某一实体下的set集合数据
- 使用批处理文件异地备份数据库(最近几天的数据)
- 三级次数据(一):在数据库使用存储过程输出为自联表形式
- 使用 SQL SERVER 2005 新增功能--- DDL_DATABASE_LEVEL_EVENTS 数据库级的触发器,创建数据库日志表
- 使用ADO操作SQL SERVER 通过'OLE DB 访问 ACCESS 数据库 ,实现数据交换
- 使用数据库的机制来确保数据的正确性
- 使用OLEDB将数据库的数据导入Excel文件