bboss标签库与jstl标签库功能对比

本文就bboss标签库与jstl标签库中的几个常用标签做个简单的对比:
逻辑标签和数据展示标签

1.导入的tld文件
使用bboss标签库,jsp头部需要导入:
<%@ taglib uri="/WEB-INF/pager-taglib.tld" prefix="pg"%>

jstl标签库,jsp头部导入:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>


2.逻辑判断标签对比
分别使用bboss和jstl来实现逻辑或条件判断功能:menuType的值为 'item'或者'module'或者'subSystem'时为真:
先看jstl
<c:if test="${menuType eq 'item' or menuType eq 'module' or menuType eq 'subSystem'}">
do somthing.
</c:if>


再看bboss,可以通过in标签和true标签来实现上述功能(使用in标签是不是比if标签要更简单和直观一些呢?):
<pg:in actual="${menuType}" scope="item,module,subSystem">
do somthing.
</pg:in>

bboss的true标签实现上述功能(true比if的语义更加明确):
<pg:true actual="${menuType eq 'item' or menuType eq 'module' or menuType eq 'subSystem'}">
do somthing.
</pg:true>


if-else对比
先看jstl
<c:choose>
<c:when test="${param.newFlag== '1' || param.newFlag== '2' ||param.newFlag== '3'}">
<th>作品名称<font color="Red">*</font>:</th>
</c:when>
<c:otherwise>
<th>班级<font color="Red">*</font>:</th>
</c:otherwise>
</c:choose>


再看bboss:
 <pg:true actual="${param.newFlag== '1' || param.newFlag== '2' ||param.newFlag== '3'}"  evalbody="true">
<pg:yes>
<th>作品名称<font color="Red">*</font>:</th>
</pg:yes>
<pg:no>
<th>班级<font color="Red">*</font>:</th>
</pg:no>
</pg:true>

再看看bboss的if-elseif-else:

<pg:case actual="${count}">

<pg:equal value="1">
yes,1!
</pg:equal>
<pg:equal value="2">
yes,2!
</pg:equal>
<pg:other>
yes,other!!
</pg:other>
</pg:case>



bboss的逻辑标签比较丰富,功能丰富,语义明确,除了true和in,还有相对应的false和notin标签,他们可以嵌套组合实现if/else等各种各样的逻辑判断操作,更加详细的信息可参考文档[url=http://yin-bp.iteye.com/blog/1137674]《bbossgroups标签库使用大全(续)》[/url];jstl的if等逻辑标签功能也非常丰富,但是语义不明确,看起来比较费劲。

3.集合展示标签对比
主要是collection/数组/map的展示标签,先看看jstl如何来展示一个collection集合:
<c:forEach var="subSys"  items="${subSystems}">
<fieldset>
<legend>${subSys.value.name}</legend>
<table>
<tr>
<td width="124" height="28" class="detailtitle">
id:
</td>
<td class="detailcontent">
${subSys.value.id}
</td>
</tr>
<tr>
<td width="124" height="28" class="detailtitle">
name:
</td>
<td class="detailcontent">
<c:forEach var="name" items="${subSys.value.localeNames}" varStatus="status">
${name.key}:${name.value}${status.index != fn:length(subSys.value.localeNames)-1 ? "," : ""} 
</c:forEach>
</td>
</tr>

<tr>
<td width="124" height="28" class="detailtitle">
baseuri:
</td>
<td class="detailcontent">
${subSys.value.baseuri}
</td>
</tr>
</table>
</fieldset>
</c:forEach>

再来看看bboss的list标签如何展示上述功能:
<pg:list actual="${subSystems}">
<fieldset>
<legend><pg:cell colName="name"/></legend>
<table>
<tr>
<td width="124" height="28" class="detailtitle">
id:
</td>
<td class="detailcontent">
<pg:cell colName="id"/>
</td>
</tr>
<tr>
<td width="124" height="28" class="detailtitle">
name:
</td>
<td class="detailcontent">
<pg:map colName="localeNames" >
<pg:mapkey />:<pg:cell /><pg:equal expression="{rowcount}-1" expressionValue="{rowid}"> ","</pg:equal> 
</pg:map>
</td>
</tr>

<tr>
<td width="124" height="28" class="detailtitle">
baseuri:
</td>
<td class="detailcontent">
<pg:cell colName="baseuri"/>
</td>
</tr>
</table>
</fieldset>
</pg:list>

jstl的foreach和bboss的list标签都可以很好地展示collection、数组、set中的数据,也能够嵌套使用,bboss有专门的map标签来展示map数据。jstl为了展示数据会定义一个数据变量和状态变量,并且获取集合长度还要反复调用fn标签;而bboss无需定义这两个变量,不仅内置了rowcount标签和rowid标签,而且在equal等逻辑标签的expression和expressionValue表达式属性中还可以使用以下内置变量:
rowid:遍历集合的当前行号(从0开始)
offset :分页标签中当前页的第一条记录在总记录中所处的位置
rowcount :总记录数
pagesize :当前页或者当前列表获取到的记录数
mapkey :map中当前记录的key
currentcell:map中当前记录的值


如果上述的list展示内容较多,我们可以精简一下:
bboss
<pg:list actual="${subSystems}">
<pg:cell colName="name"/>//对象中的name属性
<pg:cell colName="id"/>//对象中的id属性
</pg:list>

jstl实现相同的功能:
<c:forEach var="subSys"  items="${subSystems}">
${subSys.value.name}
${subSys.value.id}
</c:forEach>


呵呵,再看看一个精简的map数据的展示功能:
bboss
<pg:map actual="${publicItem.workspacecontentExtendAttribute}">
<pg:mapkey />
<pg:cell/>
</pg:map>

jstl
<c:forEach var="attribute" items="${publicItem.workspacecontentExtendAttribute}">
${attribute.key} ${attribute.value}
</c:forEach>


复杂一点的:
bboss
<pg:map actual="${publicItem.localeHeadimgs}" >						<pg:notequal expression="{rowid}" value="0">,</pg:notequal><pg:mapkey/>:<pg:cell/> 
</pg:map>

jstl
<c:forEach var="headimg" items="${publicItem.localeHeadimgs}" varStatus="status">	${headimg.key}:${headimg.value}${status.index != fn:length(publicItem.localeHeadimgs)-1 ? "," : ""} 			</c:forEach>


bboss的数据展示标签的详细使用,请参考文档[url=http://yin-bp.iteye.com/blog/1136924]《bbossgroups标签库使用大全 》[/url]。

4.总结
通过本文几个简单的功能对比,可以看出jstl和bboss的基本功能都非常丰富,从对比中可以看出bboss标签展示数据和实现逻辑判断等功能时语义更加明确,代码更加通俗易懂。(本文观点仅代表作者本人观点,欢迎大家讨论交流)
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值