`

bboss标签使用大全-数据展示标签

阅读更多
bboss标签库使用大全

本文介绍bboss中所有数据展示标签使用方法。

1.bbossgroups中的标签
1.1.数据展示标签主要是bboss taglib中的一系列标签,很好地和mvc框架、jquery、jquery easyui结合使用: pager, listdata,notify,list, beaninfo,cell, rowid,rowcount,querystring ,convert,contextmenu,map,mapkey,param,params,index,config,size
树标签:tree,treedata,radio,checkbox
1.2.逻辑标签(可以和页面数据展示标签结合使用,也可以单独使用)equal,notequal,null,notnull, equalandlower, equalandupper,
upper, lower, in, notin,match,contain,notmatch,notcontain,empty,notempty,true,false,startwith,notstartwith,endwith,notendwith
1.3.国际化和主题标签message
theme
1.4.mvc数据绑定错误信息展示标签errors
error
globalerrors
1.5.request/session标签request
session

1.6.数据库操作标签,有效防止sql注入问题
dbutil-执行数据库增、删、改操作(预编译和普通)
sqlparams-用于支持在pager标签,beaninfo标签,list标签上执行预编译操作的绑定变量集合,同时可以指定sql绑定变量的定义语法分界符。

batchutil-执行预编译批处理、普通批处理操作
statement-指定batchutil要执行的批处理语句,可以是预编译sql语句,也可以是普通sql语句
batch-指定statement指定的预编译sql语句的一组绑定变量
sqlparam-用来指定预编译操作的sql绑定变量参数的值、数据类型、数据格式,只能内置在dbutil,sqlparams,statement,batch三个标签中。

数据库标签的介绍,请参考文章:
http://yin-bp.iteye.com/blog/648161

2.下面全面介绍每类标签的简单用法。
2.1.标签定义文件的导入

<%@ taglib uri="/WEB-INF/pager-taglib.tld" prefix="pg"%>
<%@ taglib uri="/WEB-INF/treetag.tld" prefix="tree" %>
<%@ taglib uri="/WEB-INF/commontag.tld" prefix="common"%>	

2.2.config 标签
config 用来导入标签库用到的js文件,enablecontextmenu用来控制是否输出右键菜单相关的js函数,false不输出,反之输出,使用方法如下:
<pg:config enablecontextmenu="false"/>

2.3.list标签
用来输出list,set,map[],list<map>,list<string,number>等中的数据,使用方法如下,可以和pager标签结合使用,也可以直接从request,session,pagecontext中获取数据,或者直接从数据库获取数据,或者和list嵌套使用,或者通过actual属性结合el表达式获取需要展示的数据。

从request,session,pagecontext中获取数据:
<pg:list requestKey="serverHelloListBean" >			<pg:cell colName="name"/>
       <pg:cell colName="id"/>

</pg:list>


结合el表达式获取数据:
<pg:list actual="${serverHelloListBean}" >			<pg:cell colName="name"/>
       <pg:cell colName="id"/>

</pg:list>


和pager标签结合使用:
<pg:listdata dataInfo="test.pager.TableInfoListData" keyName="TableInfoListData" />
				<!--分页显示开始,分页标签初始化-->
				<pg:pager maxPageItems="15" scope="request" data="TableInfoListData" 
						  isList="false">
					<tr class="cms_report_tr">
						<!--设置分页表头-->
					<pg:header>									
										
						<td width="2%" align=center style="width:5%">
						<input class="checkbox" 
							type="checkBox" hidefocus=true 
							name="checkBoxAll" 
							onClick="checkAll('checkBoxAll','ID')"> 
						</td>
						<pg:title nowrap="true" width="5%" title="TABLE_NAME"
											sort="false" colName="" className="report_header"/>
						<pg:title nowrap="true" width="5%" title="TABLE_ID_NAME"
											sort="true" colName="TABLE_ID_NAME" className="report_header"/>
						
						<td width="28%">
							TABLE_ID_INCREMENT</td>
						
						<td width="6%">
							TABLE_ID_VALUE						</td>
						<td width="9%">
							TABLE_ID_GENERATOR						</td>
						
						<td width="10%" height='30'>TABLE_ID_TYPE</td>
						<td width="10%" height='30'>TABLE_ID_PREFIX</td>
					</pg:header>									
					</tr>
				<pg:notify>
						<tr  class="labeltable_middle_tr_01">
							<td colspan=100 align='center' height="18px">
								没有数据
							</td>
						</tr>
				</pg:notify>

					
				<pg:list  autosort="false">
					<tr class="cms_report_tr">
						

						<td width="2%" align=center style="width:5%">
							<input class="checkbox" hideFocus onClick="checkOne('checkBoxAll','ID')" 
							type="checkbox" name="ID" 
							value="<pg:cell colName="TABLE_NAME" defaultValue=""/>">										
						</td>
						<td width="8%">
							<pg:cell colName="TABLE_NAME" defaultValue=""/>					</td>
						<td width="8%">
							<pg:cell colName="TABLE_ID_NAME" defaultValue=""/>						</td>
						<td width="28%">
							<pg:cell colName="TABLE_ID_INCREMENT" defaultValue=""/></td>
						
						<td width="6%">
							<pg:cell colName="TABLE_ID_VALUE" defaultValue=""/>						</td>
						<td width="9%">
							<pg:cell colName="TABLE_ID_GENERATOR" defaultValue=""/>						</td>
						
						<td width="10%" height='30'><pg:cell colName="TABLE_ID_TYPE" defaultValue=""/></td>
						<td width="10%" height='30'><pg:cell colName="TABLE_ID_PREFIX" defaultValue=""/></td>
					</tr>
					</pg:list>
					<tr class="labeltable_middle_tr_01">
						<td colspan=11 ><div class="Data_List_Table_Bottom"> 
							共
							<pg:rowcount />
							条记录
							每页显示15条
							<pg:index />					</div>  </td>
					</tr>
					<input id="queryString" name="queryString" value="<pg:querystring/>" type="hidden">
					<tr></tr>
				</pg:pager>


直接从数据库获取数据:

<pg:list statement="select * from tableinfo order by table_id_value desc" 
	    		  dbname="bspf">
		
			<tr class="cms_data_tr" id="<pg:cell colName="table_name" defaultValue=""/>">
				<td>
					<pg:cell colName="table_name" defaultValue=""/>
				</td> 
				<td>
					<pg:cell colName="table_id_name" defaultValue="" />
				</td>
				<td class="tablecells" align=center height='30' width="5%">
					<pg:cell colName="table_id_value" defaultValue=""/>
				</td>	
			</tr>
		</pg:list>


和list嵌套使用:

<pg:list requestKey="serverHelloListBean" >			<pg:cell colName="name"/>
       <pg:list colName="innerdatas">
        <pg:cell colName="innername"/>
  <!--获取外围list的属性字段值,index是外层list索引,最外层为0-->
        <pg:cell index="0" colName="name"/>

       </pg:list>

</pg:list>


list标签还可嵌套在beaninfo、map标签中使用。list标签还可以输出数组的元素值:

<pg:list requestKey="serverHelloArray" >
								<pg:rowid increament="1"/> <pg:cell />
							</pg:list>


最后我们看一个在列表中如何嵌套其它列表实现select元素中项默认选中的例子:
<pg:list requestKey="applistData">
<select name="acctasscat">
<option value=""></option>
<pg:list requestKey="acctasscatList" >
<option value="<pg:cell colName='dict_item_code'/>" <pg:equal expression="{0.acctasscat}"  expressionValue="{dict_item_code}">
selected</pg:equal>
>
<pg:cell colName='dict_item_name'/>
</option>
</pg:list>
</select>
</pg:list>

第一个<pg:list requestKey="applistData">是一个对象列表,是需要展示的数据列表,对象中包含属性acctasscat,该属性值对应select下拉选择框的value,如果相应的下拉选择项的值和acctasscat属性的值相等则默认选中。

第二个<pg:list requestKey="acctasscatList" >是一个字典对象列表,我们用它来生成下拉选择框,dict_item_name属性是字典项名称,dict_item_code属性是字典项值,dict_item_code和第一个list中当前记录对象的acctasscat属性对应。
我们用逻辑标签equal来确定select的项是否被选中,equal标签上指定了两个表达式:expression="{0.acctasscat}"  expressionValue="{dict_item_code}"
expression和expressionValue分别代表要比较相等的两个操作数,
expression="{0.acctasscat}" 中的{0.acctasscat}的含义:{}中的名称是一个属性变量,.号前面的0代表最外层list的位置号(在这里表示第一个list,次外层为1,依次类推) ,.号后面的acctasscat表示取第一个list的当前记录的acctasscat属性值最为第一个比较操作数。

expressionValue="{dict_item_code}"中的{dict_item_code}的含义:{}中的名称是一个属性变量,dict_item_code表示取第二个list的当前记录的dict_item_code属性值最为第二个比较操作数。


2.4.cell标签

cell标签典型用法如下:
<pg:cell colName="id" />//默认输出值为""串
<pg:cell colName="id" defaultValue="mm"/>//默认输出值为"mm"串
<pg:cell colName="datea" dateformat="yyyy-MM-dd"/>
<pg:cell colName="money" numerformat="###.##"/>
<pg:cell colName="moudleCNName" htmlEncode="true"/>  //htmlEncode属性控制是否对输出进行html转义编码,true编码,false不编码,默认值为false
<pg:cell colName="id" maxlength="10"/>//超过最大长度10将被截断
<pg:cell colName="id" maxlength="10" replace="..."/>//超过最大长度10将被截断,截断的串将被replace指定的值替换掉
<pg:cell/> //直接输出对象或者当前集合中的记录值(list,数组,map,set中放置的是基本数据类型String,number等)

如果cell标签展示对对象属性时一个对象的话,可以有两种方式来展示colName对应的属性对象中的属性值:
son属性是一个对象类型,结构为:
son{name,class,sex}
第一种 直接用property属性来获取son属性中的name属性:
<pg:cell colName="son" property="name" />

第二种 通过嵌套beaninfo标签来展示son对象中的所有属性:
<pg:beaninfo colName="son">
   <pg:cell colName="name"/>
   <pg:cell colName="class"/>
   <pg:cell colName="sex"/>
</pg:beaninfo>

cell标签可以嵌套在beaninfo、list、map标签中使用也可以单独使用,单独使用的方法如下:

<pg:cell actual="${param.name}" />//直接输出el表达式${param.name}代表的值。

另外cell标签中提供了usecurrentCellValuetoCellName和currentcelltoColName两个属性,具体使用方法可参考文档:
bboss标签实现列表中的动态列数据展示方法

2.5.beaninfo标签
beaninfo标签用来展示po详细信息的标签,具体用法有从request,session,pageContext中获取要展示的对象,或者从db中获取要展示的数据,或者嵌套在list,map,beaninfo标签中展示属性对应的对象。

从request获取要展示的对象:

<pg:beaninfo requestKey="serverHelloMapBean" >
								<pg:cell colName="name"/>
							</pg:beaninfo>


从db中获取要展示的数据:
<pg:beaninfo statement="select * from tableinfo where lower(table_name)='td_sm_user' order by table_id_value desc" 
	    		  dbname="bspf">
		
			<tr class="cms_data_tr" id="<pg:cell colName="table_name" defaultValue=""/>">
				<td>
					<pg:cell colName="table_name" defaultValue=""/>
				</td> 
				<td>
					<pg:cell colName="table_id_name" defaultValue="" />
				</td>
				<td class="tablecells" align=center height='30' width="5%">
					<pg:cell colName="table_id_value" defaultValue=""/>
				</td>	
			</tr>
		</pg:beaninfo>


嵌套在list中使用:
<pg:list requestKey="serverHelloListBean" >			<pg:cell colName="name"/>
       <pg:beaninfo colName="innerdatas">
        <pg:cell colName="innername"/>
  <!--获取外围list的属性字段值,index是外层list索引,最外层为0-->
        <pg:cell index="0" colName="name"/>

       </pg:beaninfo>

</pg:list>




2.6.map、mapkey标签
map标签有两个作用:
1.用来迭代展示map中的所有对象详细信息,map标签展示的数据可以从request,session,pagecontext中获取,也可以嵌套在list,beaninfo,map标签中使用,也可以通过actual属性结合el表达式获取展示数据。
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对象中包含的数据

从request获取要展示的对象:

<pg:map requestKey="serverHelloMapBean" >
	
         <pg:mapkey/>
<pg:cell colName="name"/>
							</pg:map>


通过actual属性结合el表达式获取要展示的对象:

<pg:map actual="${serverHelloMapBean}" >
	
         <pg:mapkey/>
<pg:cell colName="name"/>
							</pg:map>


指定key获取map中的一个值:

<pg:map requestKey="serverHelloMapBean" key="testkey">
	
         <pg:cell />
							</pg:map>


如果testkey对应的是一个对象,则可以结合cell标签输出每个属性的值:
<pg:map requestKey="serverHelloMapBean" key="testkey">
	
         <pg:cell colName="pro1"/>
	<pg:cell colName="pro2"/>
</pg:map>



在list或者beaninfo中根据对象属性值获取map中的一个值:

<pg:list requestKey="serverHelloListBean" >	
<pg:cell colName="name"/>

<pg:map requestKey="serverHelloMapBean" keycolName="testkey">
	
         <pg:cell/>
</pg:map>
</pg:list>



嵌套在list中使用:
<pg:list requestKey="serverHelloListBean" >	
		<pg:cell colName="name"/>
       <pg:map colName="innerdatas">
<pg:mapkey/>
        <pg:cell colName="innername"/>
  <!--获取外围list的属性字段值,index是外层list索引,最外层为0-->
        <pg:cell index="0" colName="name"/>

       </pg:map>

</pg:list>


map标签还可以展示Map<Stirng,String>等基础数据类型value的迭代:
<table>
	    <h3>map<String,String>字符串信息迭代功能</h3>
		<pg:map requestKey="mapstrings">
		
			<tr class="cms_data_tr">
				<td>
					mapkey:<pg:mapkey/>
				</td> 
				<td>
					value:<pg:cell/>
				</td> 
				
			</tr>
		</pg:map>
		
		
	</table>


map标签嵌套在beaninfo中使用:
<pg:beaninfo requestKey="portalApplication">
<select id="module_id" name="module_id" class="select1"
style="width: 150px;">
<pg:map requestKey="moduleMap">
<option value="<pg:mapkey/>" <pg:equal expression="{mapkey}" expressionValue="{0.module_id} ">selected</pg:equal>> <pg:cell/> </option> </pg:map>
</select>
</pg:beaninfo>
其中<pg:equal expression="{mapkey}" expressionValue="{0.module_id} ">selected</pg:equal>的含义:
如果map迭代中当前的key和beaninfo标签表示的对象的module_id属性相等则输出selected(0.表示最外层容器的索引编号,次外层为1.,其他依次类推)

map标签展示map中某个key对应值以及更加复杂的案例参考文章:
bboss中的map标签结合list标签/cell标签展示复杂数据结构案例

map中嵌套beaninfo标签:
<pg:map requestKey="moduleMap">
	<pg:mapkey/>	
       <pg:cell colName="name"/>
       <pg:beaninfo colName="classInfo">
           <pg:cell colName="className"/>
       </pg:beaninfo>
         
</pg:map>

2.7.pager、listdata、querystring、rowcount、param、params、index、title、notify标签

pager标签主要用来和index、listdata、list等标签或者mvc框架控制器方法结合实现分页功能,分页数据可以从数据加载器中获取,也可以从db中直接或取,还可以从mvc控制器方法中获取。另外还可以和ajax结合在一个页面中加载多个分页模块。

从数据加载器中获取数据:
<pg:listdata dataInfo="test.pager.TableInfoListData" keyName="TableInfoListData" />
				<!--分页显示开始,分页标签初始化-->
				<pg:pager maxPageItems="15" scope="request" data="TableInfoListData" 
						  isList="false">
<pg:param name="table_name"/> 
<pg:params name="ids"/> 
					<tr >
						<!--设置分页表头-->
					<pg:header>									
										
						<td width="2%" align=center style="width:5%">
						<input class="checkbox" 
							type="checkBox" hidefocus=true 
							name="checkBoxAll" 
							onClick="checkAll('checkBoxAll','ID')"> 
						</td>
						<pg:title nowrap="true" width="5%" title="TABLE_NAME"
											sort="false" colName="" className="report_header"/>
						<pg:title nowrap="true" width="5%" title="TABLE_ID_NAME"
											sort="true" colName="TABLE_ID_NAME" className="report_header"/>
						
											</pg:header>									
					</tr>
				<pg:notify>
						<tr  class="labeltable_middle_tr_01">
							<td colspan=100 align='center' height="18px">
								没有数据
							</td>
						</tr>
				</pg:notify>

					
				<pg:list  autosort="false">
					<tr class="cms_report_tr">
						

						<td width="2%" align=center style="width:5%">
							<input class="checkbox" hideFocus onClick="checkOne('checkBoxAll','ID')" 
							type="checkbox" name="ID" 
							value="<pg:cell colName="TABLE_NAME" defaultValue=""/>">										
						</td>
						<td width="8%">
							<pg:cell colName="TABLE_NAME" defaultValue=""/>					</td>
						<td width="8%">
							<pg:cell colName="TABLE_ID_NAME" defaultValue=""/>						</td>
											</tr>
					</pg:list>
					<tr class="labeltable_middle_tr_01">
						<td colspan=11 ><div class="Data_List_Table_Bottom"> 
							共
							<pg:rowcount />
							条记录
							每页显示15条
							<pg:index />					</div>  </td>
					</tr>
					<input id="queryString" name="queryString" value="<pg:querystring/>" type="hidden">
					<tr></tr>
				</pg:pager>


其中listdata标签指定了分页标签的数据加载器,并将加载器存放在request的attribute属性TableInfoListData中,pager标签通过data属性引用该加载器,并且指定了每页最多显示15条记录;param 标签用来记录页面请求参数以便上下翻页时不丢失请求或者查询参数(单个参数);params 标签用来记录页面请求参数数组以便上下翻页时不丢失请求或者查询参数(参数数组);notify标签用来输出没有数据的提示信息;list标签用来迭代输出当页数据;rowcount标签输出总记录数;index标签输出以下内容:
上下分页导航按钮
共几页,每页多少条记录,调整到第几页,设置每页记录数等等
querystring标签用来输出页面所有参数串,用来方便进行处理和操作后任然跳回到当前页面。

从数据库中直接获取数据,这个和上面的用法的唯一区别就是:

不需要listdata标签,只需要将pager标签如下使用即可:
<pg:pager statement="select * from sqltest where rownum < 10 order by object_name " 
	    		  dbname="portal" isList="false" >


和ajax结合在一个页面中加载多个分页模块的使用方法:
主页面内容:
  <pg:config/>
	<body>
			<div id="pagecontainer">
				<script type="text/javascript">
				$(document).ready(function(){
					  $("#pagecontainer").load("pagerqueryuser.htm #pagecontent");
					});
				</script>
			</div>
			
			<div id="pagecontainer1">
				<script type="text/javascript">
				$(document).ready(function(){
					  $("#pagecontainer1").load("pagerqueryuser1.htm #pagecontent");
					});
				</script>
			</div>
	</body>


两个从页面内容基本上差不多:
<div id="pagecontent">
              
			   	<pg:pager scope="request" data="users" 
						  isList="false" containerid="pagecontainer" selector="pagecontent">
				<pg:param name="userName" encode="true"/>
			<table class="genericTbl">
					<tr >
						<pg:title nowrap="true" width="8%" title="用户ID:"
											sort="true" colName="userId" className="order1 sorted"/>	
						
						<pg:title nowrap="true" width="8%" title="用户NAME:"
											sort="true" colName="userName" className="order1 sorted"/>	
					</tr>
					<pg:notify>
					<tr class="cms_report_tr">
					<td width="10%" align=center colspan="100" style="width:5%">
						没有数据
					</td>
					</tr>				
				</pg:notify>
				<pg:list autosort="false">
					<tr class="even">
						
						 <td ><pg:cell colName="userId" defaultValue=""/>  
                         </td>  
                         <td width="8%" >  
                          <pg:cell colName="userName" defaultValue=""/></td>  
					</tr>
				</pg:list>
			</table>
			<div><pg:index/></div>
			</pg:pager> 
</div>


需要说明的就是pager标签上新加的两个属性
containerid="pagecontainer" //代表main页面的div容器id,这个分页list的内容将在该div中展示
selector="pagecontent" //表示分页页面内容的选择器

data="users"对应的ListInfo对象直接从mvc控制器方法设置到request的attribute属性中。例如:
	public String pagerqueryuser1(@PagerParam(name=PagerParam.SORT ) String sortKey,
			@PagerParam(name=PagerParam.DESC,defaultvalue="true") boolean desc,
			@PagerParam(name=PagerParam.OFFSET) long offset,
			@PagerParam(name=PagerParam.PAGE_SIZE,defaultvalue="2") int pagesize,
			@RequestParam(name = "userName") String username ,
			ModelMap model) throws UserManagerException {
		ListInfo userTemp = userService.getUsersNullRowHandler(username,offset, pagesize);
		model.addAttribute("users", userTemp);
		return "jquerypagine/page1";
	}


特别说明:分页跳转时如何记录页面的查询参数或者其他请求参数
通过param标签和params标签来记录页面的查询参数或者其他参数,放置的位置一般放置在pager标签下面,例如:
<pg:pager maxPageItems="15" scope="request" data="TableInfoListData"
  isList="false">
<pg:param name="table_name"/>
<pg:params name="ids"/>


param标签用于记录单个值的参数,参数名称通过name指定
params标签用于记录多个值的参数,参数名称通过name指定

2.8.index标签
index标签作为导航标签具有以下实用的属性:
export-控制导航键是否出现得属性:000000000(9位) 分别对应于"第几页"、“共几页”、“首页”、“下一页”、“上一页”、“尾页”、“跳转到”,“每页显示几条记录”,"共多少条记录"
对应得位置上的值为0时标示显示该按钮,为1时不显示。

useimage-导航按钮是否使用图片,默认值为false 只有useimage=true时,imagedir和imageextend才起作用
如果useimage=true时,没有指定imagedir和imageextend属性,那么采用默认属性 使用方法 <pg:index
useimage="true" imagedir="/include/images" imageextend=" border=0 "/>

useimage-如果useimage=true时,没有指定imagedir和imageextend属性,那么采用默认属性 使用方法 <pg:index
useimage="true" imagedir="/include/images" imageextend=" border=0 "/>
imagedir-导航按钮图片存放目录,存放的图片名称为: first.gif-首 页 next.gif-下一页 pre.gif-上一页
last.gif-尾 页 默认值为:/include/images

imageextend-导航图片的扩展属性串,默认值为:" border=0 "
classname-中间页面样式名称,类似于google的页码1页,2页的样式

tagnumber-设置展示的中间页面数,默认为-1,即不展示中间页
centerextend-中间页扩展属性,用来设置每个页面元素的额外css属性和其他扩展属性

sizescope-可选择页面显示记录数,默认为
"5","10","20","30","40","50","60","70","80","90","100"
用户可以自定义这个范围,以逗号分隔即可
如果在pager标签和list标签上指定的maxPageItems属性对应的页面记录条数不在sizescope范围中,那么
将把maxPageItems作为第一个选项加入到sizescope中
每页默认显示多少条记录有两个地方可以指定,一个地方是pager标签上指定:
<pg:pager maxPageItems="15" ...

一个地方是bboss mvc控制器分页方法参数pagesize的注解中指定defaultvalue="2":
	public String pagerqueryuser1(......
			@PagerParam(name=PagerParam.PAGE_SIZE,defaultvalue="2") int pagesize,
......
	}

一旦手动切换了每页显示记录条数,则会将这个最新的记录条数存到cookie中,不再使用默认设置的最大记录条数,除非清除cookie。

2.9.rowid、rowcount、pagesize标签
rowid标签用来输出list和map循环中的行号,具体使用方法如下:
<pg:rowid /> //默认从0开始
<pg:rowid increament="1"/>  //从1开始
<pg:rowid  offset="true"/>  offset为用来表示每页是否都从0开始重新计数

rowcount标签用来输出总记录数,用法如下:
<pg:rowcount />

pagesize用来输出当前页面记录,用法如下:
<pg:pagesize />

2.10 convert标签
convert标签主要用来实现属性值的转码,也就是说经属性值和名称的映射关系放到map中,然后通过convert标签结合colName和code属性结合来实现代码转换:

<%
Map aaaaa = new HashMap();
aaaaa.put("1","男");
aaaaa.put("2","女");
request.setAttribute("codes",aaaaa);
%>
<pg:convert convertData="codes" colName="sex"/>
2.11.标签内置变量
list、map、beaninfo标签都有一些内置java变量,可以直接在标签中使用:
list、map标签:dataSet对象,可以使用java代码访问该对象获取数据
beaninfo标签:beanifo对象,可以使用java代码访问该对象获取数据

更多的标签属性可以参考标签定义tld文件:pager-taglib.tld
未完待续。
分享到:
评论
12 楼 yin_bp 2014-12-04  
再不行就用texteara框输出
11 楼 yin_bp 2014-12-04  
huangjia7 写道
huangjia7 写道
将一个字符 放入 ModelMap传到前台显示,该字符中含有换行\n ,前台的<pg:cell 标签解析该字符会显示不全,现有标签有什么解决方法不?


后台代码:model.addAttribute("leaveitems", "租借的物品:电脑 1台\n遗留物品:充电器 1台");

这个字符(leaveitems)在前台显示:因为字符中有 \n ,所以用<pg:cell标签显示会不全。我是问现有的标签有解决办法吗?


cell标签写法发给我看看,试试刚才所说的htmlEncode属性为true,还有就是直接用el表达式输出试试
10 楼 huangjia7 2014-12-04  
huangjia7 写道
将一个字符 放入 ModelMap传到前台显示,该字符中含有换行\n ,前台的<pg:cell 标签解析该字符会显示不全,现有标签有什么解决方法不?


后台代码:model.addAttribute("leaveitems", "租借的物品:电脑 1台\n遗留物品:充电器 1台");

这个字符(leaveitems)在前台显示:因为字符中有 \n ,所以用<pg:cell标签显示会不全。我是问现有的标签有解决办法吗?
9 楼 yin_bp 2014-12-04  
huangjia7 写道
将一个字符 放入 ModelMap传到前台显示,该字符中含有换行\n ,前台的<pg:cell 标签解析该字符会显示不全,现有标签有什么解决方法不?

可以试试cell标签的htmlEncode属性。
8 楼 huangjia7 2014-12-04  
将一个字符 放入 ModelMap传到前台显示,该字符中含有换行\n ,前台的<pg:cell 标签解析该字符会显示不全,现有标签有什么解决方法不?
7 楼 yin_bp 2014-10-14  
huangjia7 写道
问个关于<dict>标签问题,有这样业务:对table动态增加一行:
var roomtr='<tr>'
+'<td><input id="arrivedate" name="arrivedate" type="text" class="w120" onFocus="WdatePicker()" value="<pg:cell actual="${hDate}" dateformat="yyyy-MM-dd"/>" readonly="readonly" style="width: 90px;"/></td>'
+'<td>"<dict:select type="priceCode" name="pricecode" style="width:90px"/>"</td>'
+'<td>3</td>'
+'<td class ="addLine"></td><td></td></tr>';
$(roomtr).appendTo("#roomtable");

但这种<dict>标签 写在字符串的写法会报错:
SyntaxError: missing ; before statement
+'<td>"<select name='pricecode' style='width:90px'><option value='RR'>全价</option

动态生成的下拉框不全,但<pg:cell 标签是没有问题的。有遇到这种情况吗?



原因很简单,因为这段脚本会先在服务端将<dict:select标签解析成实际的脚本替换掉原来的标签,到客户端(浏览器端)后已经变成下面的样子了:
var roomtr='<tr>'
	+'<td><input id="arrivedate" name="arrivedate" type="text" class="w120" onFocus="WdatePicker()" value="<pg:cell actual="${hDate}" dateformat="yyyy-MM-dd"/>" readonly="readonly" style="width: 90px;"/></td>'
	+'<td>"<select name='aaa'>
                   <option>aaadd</option>
                  </select>
"</td>'
	+'<td>3</td>'
	+'<td class ="addLine"></td><td></td></tr>';
 $(roomtr).appendTo("#roomtable");


这个js赋值语句语法已经乱了,在浏览器端执行这个语句时肯定报语法错误,cell标签可以是因为cell输出的值没有换行之类的特殊字符,没有破坏这条js赋值语句的语法,所以没有问题。
这个问题其实是我们在服务拼接javascript代码是必须要注意的问题,后台动态变量的值很容易破坏原来的js语法,在服务端是感觉不到,但是在浏览器端就报错了。

解决的办法就是先将这个select元素在页面中隐藏起来,然后通过js在浏览器端动态将select元素追加到表格的行中。
6 楼 huangjia7 2014-10-14  
问个关于<dict>标签问题,有这样业务:对table动态增加一行:
var roomtr='<tr>'
+'<td><input id="arrivedate" name="arrivedate" type="text" class="w120" onFocus="WdatePicker()" value="<pg:cell actual="${hDate}" dateformat="yyyy-MM-dd"/>" readonly="readonly" style="width: 90px;"/></td>'
+'<td>"<dict:select type="priceCode" name="pricecode" style="width:90px"/>"</td>'
+'<td>3</td>'
+'<td class ="addLine"></td><td></td></tr>';
$(roomtr).appendTo("#roomtable");

但这种<dict>标签 写在字符串的写法会报错:
SyntaxError: missing ; before statement
+'<td>"<select name='pricecode' style='width:90px'><option value='RR'>全价</option

动态生成的下拉框不全,但<pg:cell 标签是没有问题的。有遇到这种情况吗?


5 楼 yin_bp 2014-09-09  
这三个回复中涉及到的功能对list(列表和分页)、map、beaninfo标签都起作用
4 楼 yin_bp 2014-09-09  
根据行号求余所得的值进行比较处理:
<pg:list requestKey="titleList">
							<pg:equal expression="{rowid}%2" value="0">
								<li class="current"><a
									href="javascript:void(0);" id="<pg:cell colName="id"/>"><pg:cell colName="url"/></a></li>
							</pg:equal>
							<pg:notequal expression="{rowid}%2" value="0">
							<li><a href="javascript:void(0);" id="<pg:cell colName="id"/>"><pg:cell colName="url"/></a></li>
							</pg:notequal>
						</pg:list>
3 楼 yin_bp 2014-09-09  
rowid和pagesize内置变量结合
简单的根据行号是否是当页最后一行(行号从0开始)来进行相应的处理的实例:

<pg:list requestKey="titleList">
							<pg:equal expression="{rowid}" expressionValue="{pagesize}-1">
								<li class="current"><a
									href="javascript:void(0);" id="<pg:cell colName="id"/>"><pg:cell colName="url"/></a></li>
							</pg:equal>
							<pg:notequal expression="{rowid}"  expressionValue="{pagesize}-1">
							<li><a href="javascript:void(0);" id="<pg:cell colName="id"/>"><pg:cell colName="url"/></a></li>
							</pg:notequal>
						</pg:list>



整个标签库为表达式预留了以下变量:
rowid:可以在表达式中获取当前记录集的行号,带页面偏移量,前面可带外面集合的索引号,索引号从最外层集合以0开始,依次加1
offset:在表达式中获取当前页面记录的起始位置,分页时有用
rowcount :保存总记录数
pagesize:保存当页获取到的实际纪录数
mapkey: 保存map迭代当前的key值
currentcell:保存list/array循环中当前的值

另外表达式的使用,可以参考文档:http://yin-bp.iteye.com/blog/2022430
2 楼 yin_bp 2014-09-09  

huangjia7 写道
请问:<pg:list 标签,怎么判断当前是第几列。我现在有个业务:列表的某列,如果是第一行:会怎么怎么处理。其余行:会怎么怎么处理。

简单的根据行号是否是第0行(行号从0开始)来进行相应的处理的实例:
rowid在list中的使用方法
<pg:list requestKey="titleList">
							<pg:equal expression="{rowid}" value="0">
								<li class="current"><a
									href="javascript:void(0);" id="<pg:cell colName="id"/>"><pg:cell colName="url"/></a></li>
							</pg:equal>
							<pg:notequal expression="{rowid}" value="0">
							<li><a href="javascript:void(0);" id="<pg:cell colName="id"/>"><pg:cell colName="url"/></a></li>
							</pg:notequal>
						</pg:list>


rowid在map中的使用方法
<pg:map requestKey="titleMap">
							<pg:equal expression="{rowid}" value="0">
								<li class="current"><a
									href="javascript:void(0);" id="<pg:mapkey/>"><pg:cell /></a></li>
							</pg:equal>
							<pg:notequal expression="{rowid}" value="0">
							<li><a href="javascript:void(0);" id="<pg:mapkey/>"><pg:cell /></a></li>
							</pg:notequal>
						</pg:map>
1 楼 huangjia7 2014-09-09  
请问:<pg:list 标签,怎么判断当前是第几列。我现在有个业务:列表的某列,如果是第一行:会怎么怎么处理。其余行:会怎么怎么处理。

相关推荐

    养老院管理系统:SpringBoot与Vue前后端不分离架构的设计与实现

    内容概要:本文详细介绍了基于SpringBoot和Vue开发的养老院管理系统的具体实现细节。该系统采用前后端不分离的架构,旨在快速迭代并满足中小项目的开发需求。文中涵盖了多个关键技术点,如数据库设计(组合唯一约束、触发器)、定时任务(@Scheduled、@Async)、前端数据绑定(Vue的条件渲染和动态class绑定)、权限控制(RBAC模型、自定义注解)以及报表导出(SXSSFWorkbook流式导出)。此外,还讨论了开发过程中遇到的一些常见问题及其解决方案,如CSRF防护、静态资源配置、表单提交冲突等。 适合人群:具备一定Java和前端开发经验的研发人员,尤其是对SpringBoot和Vue有一定了解的开发者。 使用场景及目标:适用于需要快速开发中小型管理系统的团队,帮助他们理解如何利用SpringBoot和Vue进行全栈开发,掌握前后端不分离架构的优势和注意事项。 其他说明:文章不仅提供了详细的代码示例和技术要点,还分享了许多实用的小技巧和避坑指南,有助于提高开发效率和系统稳定性。

    家族企业如何应对人才流失问题?.doc

    家族企业如何应对人才流失问题?

    员工关怀制度.doc

    员工关怀制度.doc

    路径规划领域中基于排序搜索的蚁群算法优化及其应用

    内容概要:本文详细探讨了对传统蚁群算法进行改进的方法,特别是在路径规划领域的应用。主要改进措施包括:采用排序搜索机制,即在每轮迭代后对所有路径按长度排序并只强化前20%的优质路径;调整信息素更新规则,如引入动态蒸发系数和分级强化策略;优化路径选择策略,增加排序权重因子;以及实现动态地图调整,使算法能够快速适应环境变化。实验结果显示,改进后的算法在收敛速度上有显著提升,在复杂地形中的表现更加稳健。 适合人群:从事路径规划研究的技术人员、算法工程师、科研工作者。 使用场景及目标:适用于需要高效路径规划的应用场景,如物流配送、机器人导航、自动驾驶等领域。目标是提高路径规划的效率和准确性,减少不必要的迂回路径,确保在动态环境中快速响应变化。 其他说明:改进后的蚁群算法不仅提高了收敛速度,还增强了对复杂环境的适应能力。建议在实际应用中结合可视化工具进行调参,以便更好地观察和优化蚂蚁的探索轨迹。此外,还需注意避免过度依赖排序机制而导致的过拟合问题。

    基于PSO算法的配电网分布式光伏选址定容优化及其Matlab实现

    内容概要:本文详细介绍了利用粒子群优化(PSO)算法解决配电网中分布式光伏系统的选址与定容问题的方法。首先阐述了问题背景,即在复杂的配电网环境中选择合适的光伏安装位置和确定合理的装机容量,以降低网损、减小电压偏差并提高光伏消纳效率。接着展示了具体的PSO算法实现流程,包括粒子初始化、适应度函数构建、粒子位置更新规则以及越界处理机制等关键技术细节。文中还讨论了目标函数的设计思路,将多个相互制约的目标如网损、电压偏差和光伏消纳通过加权方式整合为单一评价标准。此外,作者分享了一些实践经验,例如采用前推回代法进行快速潮流计算,针对特定应用场景调整权重系数,以及引入随机波动模型模拟光伏出力特性。最终实验结果显示,经过优化后的方案能够显著提升系统的整体性能。 适用人群:从事电力系统规划与设计的专业人士,尤其是那些需要处理分布式能源集成问题的研究人员和技术人员。 使用场景及目标:适用于希望深入了解如何运用智能优化算法解决实际工程难题的人士;旨在帮助读者掌握PSO算法的具体应用方法,从而更好地应对配电网中分布式光伏系统的选址定容挑战。 其他说明:文中提供了完整的Matlab源代码片段,便于读者理解和复现研究结果;同时也提到了一些潜在改进方向,鼓励进一步探索和创新。

    Prius2004永磁同步电机设计:从Excel到MotorCAD的全流程解析与实战技巧

    内容概要:本文详细介绍了丰田Prius2004永磁同步电机的设计流程,涵盖从初始参数计算到最终温升仿真的各个环节。首先利用Excel进行基本参数计算,如铁芯叠厚、定子外径等,确保设计符合预期性能。接着使用Maxwell进行参数化仿真,通过Python脚本自动化调整磁钢尺寸和其他关键参数,优化电机性能并减少齿槽转矩。随后借助橡树岭实验室提供的实测数据验证仿真结果,确保模型准确性。最后采用MotorCAD进行温升仿真,优化冷却系统设计,确保电机运行安全可靠。文中还分享了许多实用技巧,如如何正确设置材料参数、避免常见的仿真错误等。 适合人群:从事电机设计的专业工程师和技术人员,尤其是对永磁同步电机设计感兴趣的读者。 使用场景及目标:适用于希望深入了解永磁同步电机设计全过程的技术人员,帮助他们在实际工作中提高设计效率和精度,解决常见问题,优化设计方案。 其他说明:文章提供了丰富的实战经验和具体的操作步骤,强调了理论与实践相结合的重要性。同时提醒读者注意一些容易忽视的细节,如材料参数的选择和仿真模型的准确性。

    基于DSP28335的单相逆变器设计方案与实现:涵盖ADC采样、PWM控制、锁相环及保护机制

    内容概要:本文详细介绍了基于DSP28335的单相逆变器的设计与实现,涵盖了多个关键技术模块。首先,ADC采样模块用于获取输入电压和电流的数据,确保后续控制的准确性。接着,PWM控制模块负责生成精确的脉宽调制信号,控制逆变器的工作状态。液晶显示模块则用于实时展示电压、电流等重要参数。单相锁相环电路实现了电网电压的频率和相位同步,确保逆变器输出的稳定性。最后,电路保护程序提供了过流保护等功能,保障系统的安全性。每个模块都有详细的代码示例和技术要点解析。 适合人群:具备一定嵌入式系统和电力电子基础知识的研发人员,尤其是对DSP28335感兴趣的工程师。 使用场景及目标:适用于单相逆变器项目的开发,帮助开发者理解和掌握各个模块的具体实现方法,提高系统的可靠性和性能。 其他说明:文中不仅提供了具体的代码实现,还分享了许多调试经验和常见问题的解决方案,有助于读者更好地理解和应用相关技术。

    SecureCRT安装包

    SecureCRT安装包

    C# WPF MVVM架构下的大屏看板3D可视化开发指南

    内容概要:本文详细介绍了如何利用C#、WPF和MVVM模式构建一个大屏看板3D可视化系统。主要内容涵盖WPF编程设计、自定义工业控件、数据库设计、MVVM架构应用以及典型的三层架构设计。文中不仅提供了具体的代码实例,还讨论了数据库连接配置、3D模型绑定、依赖属性注册等关键技术细节。此外,文章强调了项目开发过程中需要注意的问题,如3D坐标系换算、MVVM中命令传递、数据库连接字符串加密等。 适合人群:具备一定C#编程基础,对WPF和MVVM模式有一定了解的研发人员。 使用场景及目标:适用于希望深入了解WPF和MVVM模式在实际项目中应用的开发者,特别是那些从事工业控制系统、数据可视化平台开发的专业人士。通过学习本文,读者可以掌握如何构建高效、稳定的大屏看板3D可视化系统。 其他说明:本文提供的设计方案和技术实现方式,可以帮助开发者更好地理解和应用WPF和MVVM模式,同时也能为相关领域的项目开发提供有价值的参考。

    基于java SSM 框架的酒店管理系统.zip

    基于ssm的系统设计,包含sql文件(Spring+SpringMVC+MyBatis)

    非厄米超表面双参数传感器的COMSOL建模与应用

    内容概要:本文详细介绍了利用COMSOL进行非厄米超表面双参数传感器的设计与实现。首先,通过构建超表面单元并引入虚部折射率,实现了PT对称系统的增益-损耗交替分布。接着,通过频域扫描和参数化扫描,捕捉到了复频率空间中的能级劈裂现象,并找到了奇异点(Exceptional Point),从而显著提高了传感器对微小扰动的敏感度。此外,文章探讨了双参数检测的独特优势,如解耦温度和折射率变化的能力,并展示了其在病毒检测、工业流程监控等领域的潜在应用。 适合人群:从事光学传感器研究的专业人士,尤其是对非厄米系统和COMSOL仿真感兴趣的科研人员。 使用场景及目标:适用于需要高精度、多参数检测的应用场合,如生物医学检测、环境监测等。目标是提高传感器的灵敏度和分辨率,解决传统传感器中存在的参数交叉敏感问题。 其他说明:文中提供了详细的建模步骤和代码片段,帮助读者理解和重现实验结果。同时,强调了在建模过程中需要注意的关键技术和常见问题,如网格划分、参数设置等。

    怎样健全员工福利体系.docx

    怎样健全员工福利体系.docx

    离职证明范本.doc

    离职证明范本.doc

    6538b79724855900a9c930904a302920.part6

    6538b79724855900a9c930904a302920.part6

    员工离职单.doc

    员工离职单.doc

    COMSOL中超材料异常折射仿真的关键技术与实现

    内容概要:本文详细介绍了在COMSOL中进行超材料异常折射仿真的关键技术。首先解释了异常折射现象及其产生的原因,接着通过具体代码展示了如何利用相位梯度和结构色散精确计算折射角。文中还讨论了边界条件的设置、网格划分的优化以及参数化扫描的应用。此外,提供了多个实用脚本和技巧,帮助提高仿真的精度和效率。最后强调了验证结果的重要性和一些常见的注意事项。 适合人群:从事电磁仿真研究的专业人士,尤其是对超材料和异常折射感兴趣的科研人员和技术开发者。 使用场景及目标:适用于需要深入理解和解决超材料中异常折射问题的研究项目。主要目标是掌握COMSOL中异常折射仿真的完整流程,确保仿真结果的准确性并优化计算性能。 其他说明:文章不仅提供了详细的代码示例和技术细节,还分享了许多实践经验,有助于读者更好地应对实际仿真过程中可能出现的问题。

    招聘工作数据分析表.xls

    招聘工作数据分析表.xls

    platform-tools-latest-windows.zip

    platform-tools-latest-windows.zip

    个人资料临时存储QT资源

    个人资料临时存储QT资源

    微电网三相交流下垂控制技术详解:传统阻感型输出有功、无功及频率波形分析

    内容概要:本文详细介绍了微电网中三相交流下垂控制的工作原理和技术细节。首先,通过Matlab/Simulink搭建模型,展示了传统阻感型线路下垂特性的实现方法,特别是有功-频率和无功-电压下垂曲线的解析。文中强调了关键参数Kp和Kq的选择及其对系统稳定性的影响,并通过具体的仿真案例展示了不同参数设置下的动态响应。此外,文章讨论了波形分析中的注意事项,如谐波成分、滤波器设计以及虚拟阻抗的应用。最后,通过Python和C语言实现了下垂控制器的代码示例,进一步解释了实际工程中的实现细节。 适合人群:从事微电网研究和开发的技术人员,尤其是对下垂控制感兴趣的电气工程师和研究人员。 使用场景及目标:适用于希望深入了解微电网下垂控制原理及其实际应用的研究人员和技术人员。目标是帮助读者掌握下垂控制的核心概念和技术实现,提高在实际工程项目中的调试和优化能力。 其他说明:文章不仅提供了理论分析,还包括了大量的仿真代码和波形图,使读者能够更好地理解和验证所学内容。同时,文中提到的实际调试经验和常见错误也为初学者提供了宝贵的指导。

Global site tag (gtag.js) - Google Analytics