`

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

    博客分类:
  • birt
 
阅读更多

 

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,对脚本的使用不太明了,文中这种方式显得太过幼稚,难登诸位大神的法眼。

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

 

分享到:
评论
3 楼 bing_zz 2015-01-23  
u010821061 写道
u010821061 写道
你的total是如何获取到的啊?

新手不晓得你的页面的total是如何获取到的

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

-----
你没有理清楚报表显示页面那些导航,分页控制这些页面内容都来自于报表驱动器的哪个页面。

有一段时间没弄这个,记忆有些模糊。
要找这些页面也很简单,在浏览器上找页面源码,找导航页的内容,复制一些关键的文本,之后ctrl+h搜索birt的所有.jsp。
好了,找到之后,下一个就是慢慢研究吧。
2 楼 u010821061 2015-01-20  
u010821061 写道
你的total是如何获取到的啊?

新手不晓得你的页面的total是如何获取到的
1 楼 u010821061 2015-01-20  
你的total是如何获取到的啊?

相关推荐

    birt中使用script简介

    birt中使用script简介

    birt脚本数据源示例

    birt 脚本数据源示例,birt 脚本数据源示例,birt 脚本数据源示例

    birt 脚本数据库连接

    介绍birt的脚本数据库连接 在web项目中把数据库连接放在web里面

    BIRT报表详细示例及说明

    BIRT主要由两部分组成:一个是基于Eclipse的报表设计和一个可以加到你应用服务的运行期组件。BIRT同时也提供一个图形报表制作引擎。 BIRT拥有和Dreamweaver一般的操作界面,可以像画table一样画报表,也可以生成图片...

    birt制作报表使用css

    birt制作报表使用css,对修改birt报表样式非常有用。

    birt升级脚本(默认为2.2升级到2.5,脚本可自由配置)

    3.请修改birtUpgrade.properties中的old_driver_dir、backup_driver_dir连个属性,修改为对应的org.eclipse.birt.report.data.oda.jdbc目录名(默认为birt2.2 和2.5); 4.运行build20090715.xml下的upgrade任务; 5....

    BIRT报表学习手册

    BIRT――商业智能和报表工具。...BIRT拥有和Dreamweaver一般的操作界面,可以像画table一样画报表,也可以生成图片、导出Excel、html、pdf、ppt等分页,样式比script设置简单,另外BIRT还有OLAP导航功能。

    birt 报表javascript打印 安迅报表javascript打印问题

    birt脚本调试代码,只需要将代码放进文档中说明的位置,所有javascript调试打印结果都可以看到,提供了两种方式javascript的调试打印,网上也有很多例子说需要放到tomcat里才能打印,其实在报表开发工具中也可以打印...

    Birt中文手册.chm

    如何在仪表图或饼图中添加或格式化值系列标题 如何修改轴线 如何修改轴刻度线 如何添加或修改网格线 设计多页报告 如何在页眉和页脚中显示文本 如何指定页眉或页脚大小 如何避免首页出现页眉内容 添加交互式...

    birt中文帮助文档

    如何在仪表图或饼图中添加或格式化值系列标题 如何修改轴线 如何修改轴刻度线 如何添加或修改网格线 第十七章、设计多页报告 如何在页眉和页脚中显示文本 如何指定页眉或页脚大小 如何避免首页出现页眉内容 第十八章...

    转:Birt接收JSP传递的参数值

    描述jsp和birt报表的参数传递方法,还不错,转载

    开源报表BIRT开发手册

    4 Birt报表script 82 4.1 avascript脚本编写 82 4.1.1 隔行高亮度显示 82 4.1.2 多参数查询 84 4.1.3 脚本创建数据源 85 4.2 java脚本编写 88 4.2.1 创建java类 88 4.2.2 java类与报表交互 92 4.3 BIRT脚本参考 98 5...

    birt中文使用说明

    birt中文使用说明。。。。。。。。。。。。。。。。。。。

    开源birt报表实例

    制作的birt报表实例,常用报表制作 维度 cube 脚本使用 动态参数传递

    BIRT中文帮助文档

    BIRT中文帮助文档,BIRT中文帮助文档,BIRT中文帮助文档

    birt中文官方资料

    birt中文官方资料

    birt分组导出Excel表格空行解决方案

    birt分组导出Excel表格空行解决方案

    birt2.5.2最全面的开发手册

    简介: 1 Birt介绍 5 1.1 报表介绍 5 1.2 基本概念 5 1.3 丰富的报表 5 1.4 BIRT报表由四部分组成 6 1.5 报表设计器 6 2 Birt插件安装 8 2.1 插件版本说明 8 2.2 插件安装 9 2.2.1 完全安装 9 2.2.2 更新安装: 9 ...

Global site tag (gtag.js) - Google Analytics