Birt制作表格分页信息,通过Script脚本把组件的设置值传递到js脚本变量中

 

Birt制作表格分页信息,通过Script脚本把组件的设置值传递到js脚本变量中

 

页面效果:

<!--[endif]-->

 

组件脚本变量似乎于javascript不能用,要获取组件设置的属性还需要绕些弯弯,下面以制作表格分页信息为例说明。制作表格及样式的部分在些就省略不提了,大家都懂的。

本文的分页信息放到Master Page里,以便在每一页都可以看得到:

<!--[endif]-->

图中标示的部分是一个Text组件,选择HTML类型,输入如下内容:

 

<div id="pageInfo" />
<script type="text/javascript">
	// 脚本先于pageNumber和totalPage执行,所以需要延时。
	setTimeout(function(){
		// pageNumber和totalPage是report-viewer/NavigationbarFragment.jsp里的元素,分别显示当前页和总页数。
    	var pageNumber = parseInt(document.getElementById("pageNumber").innerText);
    	var totalPage = parseInt(document.getElementById("totalPage").innerText);
    	// pageSize来自于位于table头部的text(html类型)的脚本(非js脚本)。
    	// 通过table的onPrepare脚本获取其设置的pageBreakInterval(分页间隔,即分页大小)值,然后通过table里的text元素将其读出并传到js脚本里(保存为js公共域的变量即可),需保证其在本text标签前完成渲染。
    	var firstIndex = pageSize * (pageNumber - 1) + 1;
    	var lastIndex = pageSize * pageNumber;
    	lastIndex = lastIndex > total ? total : lastIndex;
    	
    	var str = "power by fbpang  共 " + total + " 条记录,当前显示 " + firstIndex + " ~ " + lastIndex + " 条记录    第 " 
    			+ pageNumber + " 页,共 " + totalPage + " 页";
    	    	
		document.getElementById("pageInfo").innerText = str;
	}, 100);
</script>
 

 

 

脚本里主要解决的就是获取当前分面(pageNumber)、分页总数(totalPage)和分页大小(pageSize)。

获取当前分面和分页总数可查看NavigationbarFragment.jsp文件,在WebRoot/report-viewer/birt/pages/control目录下(birt3.7.2,其他版本的自己找),这个文件是报表驱动(report engine)里的文件,用于控制分页的导航页,即下图部分:

<!--[endif]-->

打开NavigationbarFragment.js文件,找到如下代码:

 

<TD WIDTH="100%" NOWRAP>
						<B>
						<%
							if ( attributeBean.getBookmark( ) != null )
							{
						%>
							<%= 
								BirtResources.getMessage( "birt.viewer.navbar.prompt.one" )
							%>&nbsp;
							<SPAN ID='pageNumber'></SPAN>&nbsp;
							<%= BirtResources.getMessage( "birt.viewer.navbar.prompt.two" )%>&nbsp;
							<SPAN ID='totalPage'></SPAN>
						<%
							}
							else
							{
						%>
							<%= BirtResources.getMessage( "birt.viewer.navbar.prompt.one" )%>&nbsp;
							<SPAN ID='pageNumber'><%= ""+attributeBean.getReportPage( ) %></SPAN>&nbsp;
							<%= BirtResources.getMessage( "birt.viewer.navbar.prompt.two" )%>&nbsp;
							<SPAN ID='totalPage'></SPAN>
						<%
							}
						%>
						</B>
					</TD>
 

 

这就是下图所标示部分的代码:

<!--[endif]-->

其中pageNumber是当前页码,totalPage是分页总数,在js脚本里通过如下代码获取:

var pageNumber = parseInt(document.getElementById("pageNumber").innerText);
var totalPage = parseInt(document.getElementById("totalPage").innerText);
 

 

获取分页大小有些绕弯,在tableonPrepare脚本里获取分页间隔(pageBreakInterval,也就是分页大小)的值:

reportContext.setGlobalVariable("pageBreakInterval",this.getUserProperty("pageBreakInterval"));

分页间隔(pageBreakInterval)是在tablePage Break属性里设置的,如下图:

<!--[endif]-->

再在table的列头里添加一个Text组件,组件不写任何值,其任务就是做组件Script脚本和html页面js脚本的信使:

<!--[endif]-->

在其onPrepare脚本里写下如下代码,其目的是通组件Script脚本将获取的table属性保存到js脚本变量以备使用,因为tableonPrepare先于其里面的组件的onPrepare执行,所以可以这样获取值:

this.contentType = "html";
this.content = "<script type=\"text/javascript\">var pageSize = " 
	+ reportContext.getGlobalVariable("pageBreakInterval") + "</script>";
 

然后就可以在Master Page里的Text使用了,使用setTimeout延迟100ms是因为Master Page里的Text会先于NavigationbarFragment.jsp里的分页导航渲染,为保证读取到当前分页和分页总数,必须延迟这段代码的执行。

 

Birt报表提供了分页导航功能,其已满足用户的使用,似乎没有必要在弄一个显示分页信息的东西出来,但是本文只是在描述这种组件属性值的获取以及在js中的使用的方法。

 

初学birt,对脚本的使用不太明了,文中这种方式显得太过幼稚,难登诸位大神的法眼。

本文只是学习笔记,记录下来与大家分享讨论,如果大家有更优雅的方式请不吝赐教

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值