`

bboss中的map标签结合list标签/cell标签展示复杂数据结构案例

阅读更多
bboss中的map标签结合list标签/cell标签展示复杂数据结构案例

一.概述
首先介绍一下map、mapkey标签
map标签有两个作用:
1.用来迭代展示map中的所有对象详细信息,map标签展示的数据可以从request,session,pagecontext中获取,也可以嵌套在list,beaninfo,map标签中使用。
2.用来输出map中的某个值

mapkey标签在map标签中使用,用来输出map中的key值。

map中value可以为各种复杂的对象类型,value可以为普通的bean对象,基础数据类型,list/map/数组等容器对象。

map包括以下主要属性:
requestKey:指定map对象存储在request中的key名称
colName:map对象来源于bean属性名称
keycell:只展示map中的一个数据,指定map所对应的外围容器中当前记录对象作为key值,map标签然后获取key对应的value,map标签中内置的cell标签、逻辑标签、list标签都可以展示value对象中包含的数据
key:只展示map中的一个数据,指定map数据key,从map中获取key对应的value,map标签中内置的cell标签、逻辑标签、list标签都可以展示value对象中包含的数据
keycolName:只展示map中的一个数据,指定map所对应的外围容器中对象中的属性名称,key的由该属性对应的值指定,map标签然后获取key对应的value,map标签中内置的cell标签、逻辑标签、list标签都可以展示value对象中包含的数据


二、案例描述如下
   map的类型为Map<String,List<Exampbean>>,也就是key类型为String,我们会将所有的key按顺序放置到一个List<String>中,然后再list标签遍历key,然后用遍历到得key获取map中的List<Exampbean>集合,然后再用list标签遍历输出List<Exampbean>中对象属性;也会直接遍历输出map中的数据,可以看看有序的map和无序的map输出直接的区别。
三、案例实现  
   1.首先在控制器方法中构造我们需要的数据结构:
public String listmap(ModelMap model)
	{
		//将所有的key放到nameList中
		List<String> nameList = new ArrayList<String>();
		nameList.add("handlerModel");
		nameList.add("applyUnionModel");
		nameList.add("billLoanModel");
		nameList.add("loanPayModel");
		nameList.add("budgetModel");
		nameList.add("outgoModel");
		nameList.add("billItemModel");
		nameList.add("billAttachment");
		nameList.add("billSapModel");
		//构造每个key对应的List<ExampleBean>数据并放到Map<String,List<ExampleBean>> billDataMap变量中
		Map<String,List<ExampleBean>> billDataMap = new HashMap<String,List<ExampleBean>>();
		List<ExampleBean> datas = new ArrayList<ExampleBean>();//定义List<ExampleBean>集合,为了示例的简单,每个集合中只放一个ExampleBean类型对象
		ExampleBean bean = new ExampleBean();
		bean.setName("handlerModel");
		bean.setSex("男");
		datas.add(bean);
		billDataMap.put("handlerModel",datas);//put数据到map中
		datas = new ArrayList<ExampleBean>();
		bean = new ExampleBean();
		bean.setName("applyUnionModel");
		bean.setSex("女");
		datas.add(bean);
		billDataMap.put("applyUnionModel",datas);//put数据到map中
		datas = new ArrayList<ExampleBean>();
		bean = new ExampleBean();
		bean.setName("billLoanModel");
		bean.setSex("男");
		datas.add(bean);
		billDataMap.put("billLoanModel",datas);//put数据到map中
		datas = new ArrayList<ExampleBean>();
		bean = new ExampleBean();
		bean.setName("loanPayModel");
		bean.setSex("女");
		datas.add(bean);
		billDataMap.put("loanPayModel",datas);//put数据到map中
		datas = new ArrayList<ExampleBean>();
		bean = new ExampleBean();
		bean.setName("budgetModel");
		bean.setSex("男");
		datas.add(bean);
		billDataMap.put("budgetModel",datas);//put数据到map中
		datas = new ArrayList<ExampleBean>();
		bean = new ExampleBean();
		bean.setName("outgoModel");
		bean.setSex("女");
		datas.add(bean);
		billDataMap.put("outgoModel",datas);//put数据到map中
		datas = new ArrayList<ExampleBean>();
		bean = new ExampleBean();
		bean.setName("billItemModel");
		bean.setSex("女");
		datas.add(bean);
		billDataMap.put("billItemModel",datas);//put数据到map中
		datas = new ArrayList<ExampleBean>();
		bean = new ExampleBean();
		bean.setName("billAttachment");
		bean.setSex("男");
		datas.add(bean);
		billDataMap.put("billAttachment",datas);//put数据到map中
		datas = new ArrayList<ExampleBean>();
		bean = new ExampleBean();
		bean.setName("billSapModel");
		bean.setSex("未知");
		datas.add(bean);
		billDataMap.put("billSapModel",datas);//put数据到map中	
		model.addAttribute("nameList", nameList);//将名称列表放到控制器数据容器中	
		model.addAttribute("billDataMap", billDataMap);//将map数据放到控制器数据容器中
		return "path:listmap";//跳转到数据展示页面
	}


2.控制器配置文件:
<properties>
	<property name="/examples/*.page"
		path:listmap="/examples/listmap.jsp"
		class="org.frameworkset.mvc.HelloWord">
	</property>
</properties>


3.jsp实现代码,包含三部分内容:
1.直接通过list标签输出nameList中的所有key
2.根据list中key的顺序有序遍历并输出map中list中保持的bean的属性值
3.直接遍历并输出map中list中保持的bean的属性值

详细代码如下:

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>
<%@ taglib uri="/WEB-INF/pager-taglib.tld" prefix="pg"%>

			<div class="detail">
				<div class="tab">
				1.直接通过list标签输出nameList中的所有key
					<ul id="tabul">
						<pg:list requestKey="nameList">
							<li class="current"><a href="javascript:void(0);"><pg:cell /></a></li>
						</pg:list>
					</ul>
					<div class="tabdiv">
						<span></span>
					</div>
				</div>
				<div class="pannle">
				2.根据list中key的顺序有序遍历并输出map中list中保持的bean的属性值
				<ol>
					<pg:list requestKey="nameList">
						
							<pg:equal value="handlerModel"><!-- 经办列表,不同的值遍历输出的信息不一样 -->
								<pg:map requestKey="billDataMap" keycell="true"><!-- 获取当前key对应的list进行展示 -->
									<li class="pannelol"><span></span> 
									<pg:list><!-- 直接遍历输出map中存储的list,同理也可以直接遍历输出map中存储的map和数组 -->
											<ul>
												<li><label>名称:</label><pg:cell colName="name" /></li>
												<li><label>性别:</label><pg:cell colName="sex" /></li>												
											</ul>
									</pg:list></li>
								</pg:map>
							</pg:equal>
							<pg:equal value="applyUnionModel"><!-- 关联申请 -->
								<pg:map requestKey="billDataMap" keycell="true"><!-- 获取当前key对应的list进行展示 -->
									<li class="pannelol"><span></span> 
									<pg:list><!-- 直接遍历输出map中存储的list,同理也可以直接遍历输出map中存储的map和数组 -->
											<ul>
												<li><label>名称:</label><pg:cell colName="name" /></li>
												<li><label>性别:</label><pg:cell colName="sex" /></li>	
											</ul>
									</pg:list></li>
								</pg:map>
							</pg:equal>
							<pg:equal value="billLoanModel"><!-- 借款列表 -->
								<pg:map requestKey="billDataMap" keycell="true"><!-- 获取当前key对应的list进行展示 -->
									<li class="pannelol"><span></span> 
									<pg:list><!-- 直接遍历输出map中存储的list,同理也可以直接遍历输出map中存储的map和数组 -->
											<ul>
												<li><label>名称:</label><pg:cell colName="name" /></li>
												<li><label>性别:</label><pg:cell colName="sex" /></li>	
											</ul>
										</pg:list></li>
								</pg:map>
							</pg:equal>
							<pg:equal value="loanPayModel"><!-- 冲账列表 -->
								<pg:map requestKey="billDataMap" keycell="true"><!-- 获取当前key对应的list进行展示 -->
									<li class="pannelol"><span></span> 
									<pg:list><!-- 直接遍历输出map中存储的list,同理也可以直接遍历输出map中存储的map和数组 -->
											<ul>
												<li><label>名称:</label><pg:cell colName="name" /></li>
												<li><label>性别:</label><pg:cell colName="sex" /></li>	
											</ul>
										</pg:list></li>
								</pg:map>
							</pg:equal>
							<pg:equal value="budgetModel"><!-- 预算列表 -->
								<pg:map requestKey="billDataMap" keycell="true"><!-- 获取当前key对应的list进行展示 -->
									<li class="pannelol"><span></span> 
									<pg:list><!-- 直接遍历输出map中存储的list,同理也可以直接遍历输出map中存储的map和数组 -->
											<ul>
												<li><label>名称:</label><pg:cell colName="name" /></li>
												<li><label>性别:</label><pg:cell colName="sex" /></li>	
											</ul>
										</pg:list></li>
								</pg:map>
							</pg:equal>
							<pg:equal value="outgoModel"><!-- 分摊列表 -->
								<pg:map requestKey="billDataMap" keycell="true"><!-- 获取当前key对应的list进行展示 -->
									<li class="pannelol"><span></span> 
									<pg:list><!-- 直接遍历输出map中存储的list,同理也可以直接遍历输出map中存储的map和数组 -->
											<ul>
												<li><label>名称:</label><pg:cell colName="name" /></li>
												<li><label>性别:</label><pg:cell colName="sex" /></li>	
											</ul>
										</pg:list></li>
								</pg:map>
							</pg:equal>
							<pg:equal value="billItemModel"><!-- 收款列表 -->
								<pg:map requestKey="billDataMap" keycell="true"><!-- 获取当前key对应的list进行展示 -->
									<li class="pannelol"><span></span> 
									<pg:list><!-- 直接遍历输出map中存储的list,同理也可以直接遍历输出map中存储的map和数组 -->
											<ul>
												<li><label>名称:</label><pg:cell colName="name" /></li>
												<li><label>性别:</label><pg:cell colName="sex" /></li>	
											</ul>
										</pg:list></li>
								</pg:map>
							</pg:equal>
							<pg:equal value="billAttachment"><!-- 附件列表 -->
								<pg:map requestKey="billDataMap" keycell="true"><!-- 获取当前key对应的list进行展示 -->
									<li class="pannelol"><span></span> 
									<pg:list><!-- 直接遍历输出map中存储的list,同理也可以直接遍历输出map中存储的map和数组 -->
											<ul>
												<li><label>名称:</label><pg:cell colName="name" /></li>
												<li><label>性别:</label><pg:cell colName="sex" /></li>	
											</ul>
										</pg:list></li>
								</pg:map>
							</pg:equal>
							<pg:equal value="billSapModel"><!-- SAP列表信息 演示key属性,通过key属性直接获取map中的list值-->
								<pg:map requestKey="billDataMap" key="billSapModel"><!-- 直接指定key=billSapModel,获取对应的list进行展示 -->
									<li class="pannelol"><span></span> 
									<pg:list><!-- 直接遍历输出map中存储的list,同理也可以直接遍历输出map中存储的map和数组 -->
											<ul>
												<li><label>名称:</label><pg:cell colName="name" /></li>
												<li><label>性别:</label><pg:cell colName="sex" /></li>	
											</ul>
									</pg:list></li>
								</pg:map>
								
								
								
							</pg:equal>
						
					</pg:list>
					</ol>
				</div>
				<div class="pannle">
				3.直接遍历并输出map中list中保持的bean的属性值
				<ol>
					<pg:map requestKey="billDataMap">
						<li class="pannelol"><span></span> 
						<pg:list><!-- 直接遍历输出map中存储的list,同理也可以直接遍历输出map中存储的map和数组 -->
								<ul>
									<li><label>名称:</label><pg:cell colName="name" /></li>
									<li><label>性别:</label><pg:cell colName="sex" /></li>	
								</ul>
						</pg:list></li>
					</pg:map>
				</ol>
				</div>
			</div>


再举个keycolName属性使用的例子:
<pg:list requestKey="nameList">
<pg:map requestKey="billDataMap" keycolName="name">
对应的key:<pg:mapkey/>
对应的value:<pg:cell/>
</pg:map>
</pg:list>
这个例子的含义是,根据list中对象属性name获取map 对象billDataMap中和name对应的值并输出这个key和value

四、总结
bboss标签库提供了一系列的数据展示标签、逻辑标签、国际化标签,可以非常方便地在jsp页面中输出各种复杂的数据结构,本文着重介绍了map标签如何与list、cell标签组合实现map数据的有序输出,展示了bboss标签库的独特数据展示能力。
更加详细介绍bboss标签库参考文档如下:
bbossgroups标签使用大全 
bbossgroups标签库使用大全(续) 
分享到:
评论
3 楼 yin_bp 2014-10-25  
liqing0304 写道
现在我有一个list中间放了一个map,map的key是一个时间段不固定的,我把这个时间段放在另一个list里,我遍历时间的list要取出另一个list里的map对应时间的值


可以参考一下代码实现你需要的效果,演示了两种实现方法:
<%
List rooms = new ArrayList();
for (int i =0 ; i < 10; i ++) {
Map map=new HashMap();
map.put("rommType", "麻将室"+i);
map.put("rommTypeID", "mj"+i);
map.put("overNum", (100+i)+"");
for (int j = 0; j < 10 ; j ++) {//设置动态属性

	map.put("day "+j+"剩余房间数:", (10+j)+"");//map增加时间段内的数据
}
rooms.add(map);
}
List<String> days=new ArrayList<String>();
for (int j = 0; j < 10 ; j ++) {
	days.add("day "+j+"剩余房间数:");
}


List<RoomDay> roomDays=new ArrayList<RoomDay>();
for (int j = 0; j < 10 ; j ++) {
	RoomDay roomDay = new RoomDay();
	roomDay.setDay("day "+j+"剩余房间数:");
	roomDays.add(roomDay);
}
request.setAttribute("rooms", rooms);
request.setAttribute("days", days);
request.setAttribute("roomDays", roomDays);
%>
<div>
<p>currentcelltoColName属性演示</p>
<div>
<pg:list requestKey="rooms">
 <p> <pg:cell colName="rommType"/></p>
  <p><pg:cell colName="rommTypeID"/></p>
  <p><pg:cell colName="overNum"/></p>
  <p><pg:list requestKey="days">
  		<p><pg:cell/><pg:cell index="0" currentcelltoColName="true"/></p>
  </pg:list></p>
</pg:list>
</div>
</div>

<div>
<p>usecurrentCellValuetoCellName属性演示</p>
<div>
<pg:list requestKey="rooms">
  <p><pg:cell colName="rommType"/></p>
  <p><pg:cell colName="rommTypeID"/></p>
  <p><pg:cell colName="overNum"/></p>
  <p><pg:list requestKey="roomDays">
  		<p><pg:cell colName="day"/><pg:cell index="0" usecurrentCellValuetoCellName="day"/></p>
  </pg:list></p>
</pg:list>
</div>
</div>
2 楼 liqing0304 2014-10-23  
这是第一个list,放的map
for (RoomTypeEntity rt : list) {
Map map=new HashMap();
map.put("rommType", rt.getTypecode());
map.put("rommTypeID", rt.getId());
map.put("overNum", rt.getOverbook());
for (Date t=saterDate;t.getTime()<=endDate.getTime();t=addDate(t)) {

map.put(str, rt.getTotalroom()-Integer.valueOf(zyf));//map增加时间段内的数据
}
datas.add(map);
}
第二个list
List<Room> list=new ArrayList<Room>();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); 
for (Date t=saterDate;t.getTime()<=endDate.getTime();t=addDate(t)) {
Room rm=new Room();
rm.setId(sdf.format(t));
list.add(rm);
}
我要根据第二个list里的时间取出对应的第一个list的map的值
1 楼 liqing0304 2014-10-23  
现在我有一个list中间放了一个map,map的key是一个时间段不固定的,我把这个时间段放在另一个list里,我遍历时间的list要取出另一个list里的map对应时间的值

相关推荐

    linux基础进阶笔记

    linux基础进阶笔记,配套视频:https://www.bilibili.com/list/474327672?sid=4493093&spm_id_from=333.999.0.0&desc=1

    IMG20241115211541.jpg

    IMG20241115211541.jpg

    Sen2_ARI_median.txt

    GEE训练教程——Landsat5、8和Sentinel-2、DEM和各2哦想指数下载

    毕业设计&课设_基于 flask-whoosh-jieba 的代码,涉及文件管理及问题修复.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    基于springboot家政预约平台源码数据库文档.zip

    基于springboot家政预约平台源码数据库文档.zip

    Ucharts添加stack和折线图line的混合图

    Ucharts添加stack和折线图line的混合图

    基于springboot员工在线餐饮管理系统源码数据库文档.zip

    基于springboot员工在线餐饮管理系统源码数据库文档.zip

    2015-2021年新能源汽车分地区、分类型、分级别销量逐月数据和进出口数据-最新出炉.zip

    新能源汽车进出口数据 1、时间跨度:2018-2020年 2、指标说明:包含如下指标的进出口数据:混合动力客车(10座及以上)、纯电动客车(10座及以上)、非插电式混合动力乘用车、插电式混合动力乘用车、纯电动乘用车 二、新能源汽车进出口月销售数据(分地区、分类型、分 级别) 1、数据来源:见资料内说明 2、时间跨度:2014年1月-2021年5月 4、指标说明: 包含如下指标 2015年1月-2021年5月新能源乘用车终端月度销量(分类型)部分内容如下: 新能源乘用车(单月值、累计值 )、插电式混合动力 月度销量合计(狭义乘用车轿车、SUV、MPV、交叉型乘用车); 月度销量同比增速(狭义乘用车轿车、SUV、MPV、交叉型乘用车); 累计销量合计(狭义乘用车轿车、SUV、IPV、交叉型乘用车); 累计销量同比增速(狭义乘用车轿车、SUV、MPV、交叉型乘用车); 累计结构变化(狭义乘用车轿车、SUV、IPV、交叉型乘用车); 2015年1月-2021年5月新能源乘用车终端月度销量(分地区)内容如下: 更多见资源内

    中心主题-241121215200.pdf

    中心主题-241121215200.pdf

    蓝奏云下载链接与密码整理

    内容概要:本文档提供了多个蓝奏云下载链接及其对应解压密码,帮助用户快速获取所需文件。 适合人群:需要从蓝奏云下载文件的互联网用户。 使用场景及目标:方便地记录并分享蓝奏云上文件的下载地址和密码,提高下载效率。 阅读建议:直接查看并使用提供的链接和密码即可。若遇到失效情况,请尝试联系上传者确认更新后的链接。

    Javaweb仓库管理系统项目源码.zip

    基于Java web 实现的仓库管理系统源码,适用于初学者了解Java web的开发过程以及仓库管理系统的实现。

    Python-文件重命名-自定义添加文字-重命名

    资源名称:Python-文件重命名-自定义添加文字-重命名 类型:windows—exe可执行工具 环境:Windows10或以上系统 功能: 1、点击按钮 "源原文"【浏览】表示:选择重命名的文件夹 2、点击按钮 "保存文件夹"【浏览】表示:保存的路径(为了方便可选择保存在 源文件中 ) 3、功能①:在【头部】添加自定义文字 4、功能②:在【尾部】添加自定义文字 5、功能③:输入源字符 ;输入替换字符 可以将源文件中的字符替换自定义的 6、功能④:自动加上编号_1 _2 _3 优点: 1、非常快的速度! 2、已打包—双击即用!无需安装! 3、自带GUI界面方便使用!

    JDK8安装包,为各位学习的朋友免费提供

    JDK8安装包

    Centos-7yum的rpm包

    配合作者 一同使用 作者地址没有次下载路径 https://blog.csdn.net/weixin_52372189/article/details/127471149?fromshare=blogdetail&sharetype=blogdetail&sharerId=127471149&sharerefer=PC&sharesource=weixin_45375332&sharefrom=from_link

    setup_python_geospatial_analysis.ipynb

    GEE训练教程

    毕业设计&课设_文成公主微信公众号全栈工程,含技术栈、架构及部署流程等内容.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    基于springboot交通感知与车路协同系统源码数据库文档.zip

    基于springboot交通感知与车路协同系统源码数据库文档.zip

    基于springboot+vue 雅妮电影票购买系统源码数据库文档.zip

    基于springboot+vue 雅妮电影票购买系统源码数据库文档.zip

    使用 HTML5 实现拖放交互:音效与提示功能的完整实现

    为了更好地理解 HTML5 的拖放功能,我们设计了一个简单有趣的示例:将水果从水果区拖放到购物笼中,实时更新数量和价格,并在所有水果被成功放置后,播放音效并显示提示。

    毕业设计&课设_基于 SSM 的大学生综合成绩测评系统(含信息及数据库脚本,体现系统架构及功能设计).zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

Global site tag (gtag.js) - Google Analytics