`

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对应时间的值

相关推荐

    bboss mvcdemo 下载地址

    - 视图渲染:如何配置和使用不同的模板引擎,以及如何在视图中展示模型数据。 - AOP应用:示例展示如何定义切面,以及如何应用事务管理和权限控制。 - 国际化与本地化:如何配置多语言环境,以及如何在应用中切换...

    由 bboss 开源的数据采集&流批一体化工具,提供数据采集、数据清洗转换处理和数据入库以及数据指标统计计算流批一体化处理功能

    **bboss-datatran** 是一个由 **bboss** 社区开源的高效数据处理工具,专注于数据采集、数据清洗转换以及数据入库等任务。它实现了流批一体化的数据处理能力,使得用户能够灵活地应对实时和批量的数据处理场景。在...

    bboss ioc配置文件中使用外部属性文件介绍

    本文将详细介绍如何在BBoss的IOC配置文件中引用外部属性文件,以便更好地管理和动态配置应用。 首先,BBoss的IOC配置文件通常是一个XML文件,比如`bboss-ioc.xml`,在这个文件中我们可以声明并配置各种bean。当需要...

    bboss会话共享培训文档

    bboss会话共享是一种分布式会话管理技术,它针对在集群环境下应用部署时如何解决会话数据丢失和单点登录问题提供了专门的解决方案。根据提供的文档内容,我们可以详细探讨bboss会话共享涉及的关键知识点。 首先,...

    bboss+es基本操作示例.zip

    结合bboss和Elasticsearch,开发者可以轻松实现日志实时分析、用户行为追踪、商品推荐等业务场景,通过DSL实现复杂查询和聚合分析,提升应用的数据处理能力。 总之,bboss+es基本操作示例是学习和实践Elastic...

    bboss 插件工程,持久层hibernate/hibernate4插件

    bboss-plugins project.包含kafka、log4j、spring、dubbo、activemq、word转pdf、pdf转swf项目,持久层hibernate/hibernate4插件

    springboot集成ElasticsearchBboss调用Elasticsearch.md

    springboot集成ElasticsearchBboss调用Elasticsearch的案例分享

    企业级J2EE开源框架bboss

    总之,BBoss作为一款企业级J2EE开源框架,它的设计思路是提高开发效率、简化代码结构,并且具备良好的扩展性和维护性,适合大型复杂项目的开发。其丰富的功能和组件,使得开发者能够更加专注于业务逻辑,而非底层...

    由 bboss 开源的数据采集同步ETL工具,提供数据采集、数据清洗转换处理和数据入库以及数据指标统计计算流批一体化处理功能

    bboss-datatran 由 bboss 开源的数据采集&流批一体化工具,提供数据采集、数据清洗转换处理和数据入库以及数据指标统计计算流批一体化处理功能。 同时也是一个高性能Elasticsearch orm 客户端,100%兼容es各个版本 ...

    springboot整合bboss es增删改查测试demo代码

    本实例是一个基于bboss es spring boot starter的demo maven工程,可供spring boot项目集成bboss elasticsearch rest client参考 展示了通过spring boot管理单集群功能和管理多集群功能 单集群测试用例:...

    bboss persistent 1.0.2中方便地实现大字段(clob,blob)的处理

    4. **源码分析**:标签中提到的“源码”意味着我们可以通过查看BBoss Persistent的源代码来了解其内部处理大字段的具体实现。通过这种方式,开发者可以更好地理解其工作原理,进行定制化开发或优化。 5. **工具支持...

    Bboss和xstream序列化反序列化性能对比1

    在测试中,我们观察了它们对特定数据结构的处理效率,这些数据结构包括基本类型(如int和String)、日期、数组、列表、映射、集合以及嵌套的对象结构。 在数据结构方面,测试使用了一个名为`Person`的类,该类包含...

    bboss-elasticsearch开发环境搭建和开发入门视频教程.

    2. **插入数据**: 将业务数据插入到索引中,BBoss 提供了批量插入功能,可以高效处理大量数据。 3. **查询数据**: 构建查询条件,通过 BBoss API 发送请求并解析返回结果。 4. **更新和删除**: 更新已存在的文档,...

    bboss-elastic-tran:bboss 数据同步工具

    弹性Tran老板数据交换模块使用文档: : Bboss是一个很好的Elasticsearch Java Rest客户端。 它运行并访问像mybatis这样的elasticsearch来关联数据库。环境要求JDK要求:JDK 1.7+ Elasticsearch版本要求:1.X,2.X,5...

    bboss elasticsearch-5.7.8.rar

    6. `bboss-velocity-5.5.0.jar`:Velocity是Apache的一个模板引擎,用于生成动态内容,可能在BBoss Elasticsearch中用于构建自定义模板,生成用于导入Elasticsearch的JSON格式数据。 7. `bboss-core-5.5.0.jar`:这...

    bboss-db-elasticsearch-tool-master_java_

    BBoss-DB-Elasticsearch-Tool提供了一套API,使得开发者能够便捷地将Java对象存入Elasticsearch索引,或者从索引中检索数据,同时支持复杂的查询和聚合操作。 除了基本的CRUD(创建、读取、更新、删除)操作,BBoss...

    bboss mvc 通过jsonp实现跨站跨域远程访问

    JSONP(JSON with Padding)是一种跨域数据交互协议,它利用了`&lt;script&gt;`标签可以跨域请求资源的特性来实现跨站数据交互。在Web开发中,由于浏览器的同源策略限制,JavaScript通常无法直接访问不同源的资源。但JSONP...

    bboss 安全认证过滤器功能介绍

    BBoss安全认证过滤器是Java Web开发中一种用于实现用户身份验证和权限控制的重要组件。在Web应用程序中,过滤器(Filter)是Servlet规范的一部分,它允许开发者在请求到达目标Servlet或JSP之前进行预处理,以及在...

Global site tag (gtag.js) - Google Analytics