10.4 图表的动态设置与异步刷新
首先我们实现一个jsp输入框与birt的异步刷新。
新建一个报表,取名TopNPercent.rptdesign,空白模板,sql查询结果集。
新建数据源MyDataSource,采用BIRT设计器自带的例子数据库:
驱动程序类:org.eclipse.birt.report.data.oda.sampledb.Driver (Classic Models Inc. SampleDB Driver)
Database URL:jdbc:classicmodels:sampled
用户名:ClassicModels
新建数据集Customer Sales
select CUSTOMERS.CUSTOMERNAME,
CUSTOMERS.CUSTOMERNUMBER,
sum(ORDERDETAILS.QUANTITYORDERED *
ORDERDETAILS.PRICEEACH) as CUSTOMERTOTAL
from CUSTOMERS, ORDERS, ORDERDETAILS
where CUSTOMERS.CUSTOMERNUMBER = ORDERS.CUSTOMERNUMBER
and ORDERS.ORDERNUMBER = ORDERDETAILS.ORDERNUMBER
group by CUSTOMERS.CUSTOMERNAME, CUSTOMERS.CUSTOMERNUMBER
order by CUSTOMERTOTAL
新建两个参数:
参数:Top Count
提示文本:Number of Customers for Top "N" Chart
数据类型:十进制
显示类型:文本框
帮助文本:Enter the number of customers you wish included in the top "N" graph of the report
默认值:5
参数:Top Percentage
提示文本:Percentage of Customers for Top N% Listing
数据类型:十进制
显示类型:文本框
帮助文本:Enter the percentage of customers you wish included in the top N% listing of the report
默认值:25
在报表编辑器中插入三个网格,分别为1行2列,2行1列,2行1列。
最上面的网格,左边一列插入一个图片,格式为嵌入,地址为:C:\Documents and Settings\pclenahan\My Documents\ClassicModels\logos\Classic-Models-Full-M.jpg
右边一列插入三个文本,分别为:
文本:Classic Models, Inc. 字体格式:蓝色字体,加粗,大小20点
HTML格式动态文本:701 Gateway Boulevard, San Francisco, CA 94107
HTML格式动态文本:Top <VALUE-OF>params["Top Count"]</VALUE-OF> / Top <VALUE-OF>params["Top Percentage"]</VALUE-OF>% Customers by Revenue 字体格式:黑色字体,加粗,大小16点
中间插入图表:
第一行插入文本:
HTML格式动态文本:Top <VALUE-OF>params["Top Count"]</VALUE-OF> Customers
第二行插入图表:
使用以下来源的数据- Customer Sales,类别(X)系列选择可用列绑定-图表- row["CUSTOMERNAME"],值(Y)系列选择可用列绑定-图表- row["CUSTOMERTOTAL"].
筛选器:row["CUSTOMERTOTAL"],Top N, params["Top Count"]
在第二行图表上建立书签:"TopSalesChart"
最下面的网格:
第一行插入文本:
HTML格式动态文本:Top <VALUE-OF>params["Top Percentage"]</VALUE-OF>% Customers (sorted by name)
第二行插入一个1行3列的表:分别绑定dataSetRow["CUSTOMERNAME"],dataSetRow["CUSTOMERNUMBER"],dataSetRow["CUSTOMERTOTAL"],
新建过滤器:row["CUSTOMERTOTAL"],上百分比,params["Top Percentage"]
在最下面的网格上新建书签:"TopPercent"
最终预览的效果:
新建JSP,名称为mashup.jsp,内容如下:
- <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
- pageEncoding="ISO-8859-1"%>
- <%@ taglib uri="/birt.tld" prefix="birt" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <meta http-equiv="Content-Language" content="en-us">
- <title>BIRT JSP Tag Lib Mashup</title>
- <style>
- .pageHeader {
- position: absolute;
- width: 1020px;
- text-align: center;
- color: #224499;
- font-size: xx-large;
- font-weight: bold;
- }
- .mashupContainer {
- position: absolute;
- font-family: Verdana, Tahoma, Arial;
- font-size: 11px;
- border: 1px solid #87AFDA;
- margin: 3px;
- }
- .mashupTitle {
- position: absolute;
- background: #D4E6FC;
- font-size: 14px;
- font-weight: bold;
- color: #224499;
- padding: 3px;
- border-bottom: 1px solid #87AFDA;
- }
- .mashupContent {
- position: absolute;
- padding: 3px;
- }
- </style>
- <script type="text/javascript">
- function populateDefaults(elem){
- txtBox = document.getElementById(elem);
- if(txtBox.value == ""){
- if(elem == "TopN"){
- txtBox.value = 5;
- }else if(elem == "TopP"){
- txtBox.value = 25;
- }
- }
- }
- function refreshTag(iframeName, elem, paramName) {
- var c = document.getElementById(elem).value;
- origUrl = window.frames[iframeName].location.toString();
- var pos = origUrl.indexOf('&__overwrite=true&Top');
- if (pos > 0) {
- window.frames[iframeName].location = origUrl.substr(0, pos) + '&__overwrite=true&' + paramName + '=' + c;
- } else {
- window.frames[iframeName].location = origUrl
- + '&__overwrite=true&' + paramName + '=' + c;
- }
- }
- </script>
- </head>
- <body>
- <div class="mashupContainer" id="salesDataContainer" style="z-index: 1000; top: 50px; left: 50px; height: 400px; width: 320px;">
- <div class="mashupTitle" style="z-index: -1; width: 98%; height: 20px;">Report Parameters</div>
- <div class="mashupContent" id="SalesData" style="padding-top: 20px; z-index: -1; top: 24px; left: 0px; width; 320px%; height: 300px;">
- TOP COUNT PARAMETER
- <input type="Text" id="TopN" name="TopN" onblur="populateDefaults('TopN')">
- <br><br>
- <INPUT TYPE="button" NAME="button" Value="Refresh Chart" onClick="refreshTag('birtViewer', 'TopN', 'Top%20Count')" >
- <br><br>
- <br><br>
- TOP PERCENT PARAMETER
- <input type="Text" id="TopP" name="TopP" onblur="populateDefaults('TopP')">
- <br><br>
- <INPUT TYPE="button" NAME="button" Value="Refresh Table" onClick="refreshTag('birtViewer2', 'TopP', 'Top%20Percentage')" >
- </div>
- </div>
- <div class="mashupContainer" id="salesChartContainer" style="top: 50px; left: 400px; width: 655px; height: 400px;">
- <div class="mashupTitle" style="width: 99.1%; height: 20px;">Top Customer Sales Chart</div>
- <div class="mashupContent" id="SummaryDiv" style="top: 24px; left: 0px; width: 99%; height: 380px;">
- <birt:viewer id="birtViewer"
- reportDesign="TopNPercent.rptdesign"
- baseURL="<%= request.getContextPath( )%>"
- pattern="run"
- height="367"
- width="645"
- format="html"
- frameborder="false"
- isHostPage="false"
- isReportlet="true"
- bookmark="TopSalesChart"
- showParameterPage="false"
- >
- </birt:viewer>
- </div>
- </div>
- <div class="mashupContainer" style="top: 500px; left: 20px; height: 650px; width: 1000px;">
- <div class="mashupTitle" style="width: 99.4%; height: 20px;">Top % of Customers by Sales</div>
- <div class="mashupContent" id="SalesByYearDiv" style="top: 25px; width: 99%; height: 40px; align: middle; text-align: center;">
- <!-- This example uses the same report design, but this can a different rptdesign file than used above -->
- <birt:viewer id="birtViewer2"
- reportDesign="TopNPercent.rptdesign"
- baseURL="<%= request.getContextPath( )%>"
- pattern="run"
- height="615"
- width="990"
- format="html"
- frameborder="false"
- isHostPage="false"
- isReportlet="true"
- bookmark="TopPercent"
- showParameterPage="false"
- >
- </birt:viewer>
- </div>
- </div>
- </body>
- </html>
- <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
- pageEncoding="ISO-8859-1"%>
- <%@ taglib uri="/birt.tld" prefix="birt" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
- <meta http-equiv="Content-Language" content="en-us">
- <title>BIRT JSP Tag Lib Mashup</title>
- <style>
- .pageHeader {
- position: absolute;
- width: 1020px;
- text-align: center;
- color: #224499;
- font-size: xx-large;
- font-weight: bold;
- }
- .mashupContainer {
- position: absolute;
- font-family: Verdana, Tahoma, Arial;
- font-size: 11px;
- border: 1px solid #87AFDA;
- margin: 3px;
- }
- .mashupTitle {
- position: absolute;
- background: #D4E6FC;
- font-size: 14px;
- font-weight: bold;
- color: #224499;
- padding: 3px;
- border-bottom: 1px solid #87AFDA;
- }
- .mashupContent {
- position: absolute;
- padding: 3px;
- }
- </style>
- <script type="text/javascript">
- function populateDefaults(elem){
- txtBox = document.getElementById(elem);
- if(txtBox.value == ""){
- if(elem == "TopN"){
- txtBox.value = 5;
- }else if(elem == "TopP"){
- txtBox.value = 25;
- }
- }
- }
- function refreshTag(iframeName, elem, paramName) {
- var c = document.getElementById(elem).value;
- origUrl = window.frames[iframeName].location.toString();
- var pos = origUrl.indexOf('&__overwrite=true&Top');
- if (pos > 0) {
- window.frames[iframeName].location = origUrl.substr(0, pos) + '&__overwrite=true&' + paramName + '=' + c;
- } else {
- window.frames[iframeName].location = origUrl
- + '&__overwrite=true&' + paramName + '=' + c;
- }
- }
- </script>
- </head>
- <body>
- <div class="mashupContainer" id="salesDataContainer" style="z-index: 1000; top: 50px; left: 50px; height: 400px; width: 320px;">
- <div class="mashupTitle" style="z-index: -1; width: 98%; height: 20px;">Report Parameters</div>
- <div class="mashupContent" id="SalesData" style="padding-top: 20px; z-index: -1; top: 24px; left: 0px; width; 320px%; height: 300px;">
- TOP COUNT PARAMETER
- <input type="Text" id="TopN" name="TopN" onblur="populateDefaults('TopN')">
- <br><br>
- <INPUT TYPE="button" NAME="button" Value="Refresh Chart" onClick="refreshTag('birtViewer', 'TopN', 'Top%20Count')" >
- <br><br>
- <br><br>
- TOP PERCENT PARAMETER
- <input type="Text" id="TopP" name="TopP" onblur="populateDefaults('TopP')">
- <br><br>
- <INPUT TYPE="button" NAME="button" Value="Refresh Table" onClick="refreshTag('birtViewer2', 'TopP', 'Top%20Percentage')" >
- </div>
- </div>
- <div class="mashupContainer" id="salesChartContainer" style="top: 50px; left: 400px; width: 655px; height: 400px;">
- <div class="mashupTitle" style="width: 99.1%; height: 20px;">Top Customer Sales Chart</div>
- <div class="mashupContent" id="SummaryDiv" style="top: 24px; left: 0px; width: 99%; height: 380px;">
- <birt:viewer id="birtViewer"
- reportDesign="TopNPercent.rptdesign"
- baseURL="<%= request.getContextPath( )%>"
- pattern="run"
- height="367"
- width="645"
- format="html"
- frameborder="false"
- isHostPage="false"
- isReportlet="true"
- bookmark="TopSalesChart"
- showParameterPage="false"
- >
- </birt:viewer>
- </div>
- </div>
- <div class="mashupContainer" style="top: 500px; left: 20px; height: 650px; width: 1000px;">
- <div class="mashupTitle" style="width: 99.4%; height: 20px;">Top % of Customers by Sales</div>
- <div class="mashupContent" id="SalesByYearDiv" style="top: 25px; width: 99%; height: 40px; align: middle; text-align: center;">
- <!-- This example uses the same report design, but this can a different rptdesign file than used above -->
- <birt:viewer id="birtViewer2"
- reportDesign="TopNPercent.rptdesign"
- baseURL="<%= request.getContextPath( )%>"
- pattern="run"
- height="615"
- width="990"
- format="html"
- frameborder="false"
- isHostPage="false"
- isReportlet="true"
- bookmark="TopPercent"
- showParameterPage="false"
- >
- </birt:viewer>
- </div>
- </div>
- </body>
- </html>
说明:中间的style用来定义格式,javascript脚本用来刷新指定的frame,传递参数
下面的三个frame,第一个是两个输入框,提交到javascript脚本刷新frame
第二个和第三个是个jsp tag方式嵌入birt的frame,需要先在jsp引入birt tag,
<%@ taglib uri="/birt.tld" prefix="birt" %>
格式说明如下
<birt:viewer id="birtViewer"
<!—指定iframe的名称,方便javascript脚本查找指定—>
reportDesign="TopNPercent.rptdesign"
<!—指定嵌入报表的名称—>
baseURL="<%= request.getContextPath( )%>"
<!—指定嵌入报表的路径—>
pattern="run"
<!—指定报表的运行模式,run模式没有导航栏和工具栏,没有分页,需自己指定,运行较快,frame模式有导航栏和工具栏,能分页,运行较慢—>
height="367"
width="645"
format="html"
<!—指定嵌入报表的高度,宽度,显示格式—>
frameborder="false"
<!—指定嵌入报表的边界—>
isHostPage="false"
isReportlet="true"
bookmark="TopSalesChart"
<!—指定嵌入报表的书签部分—>
showParameterPage="false"
<!—不显示提示输入参数对话框—>
>
部署jsp,birtdesign文件,运行效果如下,初始页面如下:
分别输入10,30,提交刷新:
下面我们用这种jsp内置多个frame的方式来实现一个列表和图表的联动,图表和图表的联动。
新建报表overall2.rptdesign,空白模板,sql查询结果集
新建数据源MyDataSource,采用BIRT设计器自带的例子数据库:
驱动程序类:org.eclipse.birt.report.data.oda.sampledb.Driver (Classic Models Inc. SampleDB Driver)
Database URL:jdbc:classicmodels:sampled
用户名:ClassicModels
新建数据集OverallDataSet:
select CLASSICMODELS.PRODUCTS.PRODUCTNAME,
sum(CLASSICMODELS.ORDERDETAILS.PRICEEACH * CLASSICMODELS.ORDERDETAILS.QUANTITYORDERED) as "sales"
from CLASSICMODELS.ORDERS, CLASSICMODELS.ORDERDETAILS, CLASSICMODELS.PRODUCTS
where (CLASSICMODELS.ORDERS.ORDERNUMBER = CLASSICMODELS.ORDERDETAILS.ORDERNUMBER)
and (CLASSICMODELS.ORDERDETAILS.PRODUCTCODE = CLASSICMODELS.PRODUCTS.PRODUCTCODE)
and (CLASSICMODELS.PRODUCTS.PRODUCTLINE = 'Classic Cars')
group by CLASSICMODELS.PRODUCTS.PRODUCTNAME
在报表编辑器里新建一个1行1列的网格,在网格内插入一个1行2列的表
在表的第一列插入动态文本,表达式生成器中输入row.__rownum,或者可用列绑定为行数,在javascript脚本的onRender方法中输入以下脚本:
- var value1=row["PRODUCTNAME"];
- var str="<script language='JavaScript' type='text/JavaScript'>function refreshTag (paravalue){var origUrl = parent.frames['birtViewer2'].location.toString();var pos = origUrl.indexOf('&__overwrite=true');if (pos > 0) { parent.frames['birtViewer2'].location = origUrl.substr(0, pos) + '&__overwrite=true&productname='+paravalue ;} else {parent.frames['birtViewer2'].location = origUrl+ '&__overwrite=true&productname='+ paravalue;} }</script><a href='' οnclick=' refreshTag (\""+value1+"\")'><i><u><b>" + value1 + "</b></u></i></a>";
- this.text = str;
- var value1=row["PRODUCTNAME"];
- var str="<script language='JavaScript' type='text/JavaScript'>function refreshTag (paravalue){var origUrl = parent.frames['birtViewer2'].location.toString();var pos = origUrl.indexOf('&__overwrite=true');if (pos > 0) { parent.frames['birtViewer2'].location = origUrl.substr(0, pos) + '&__overwrite=true&productname='+paravalue ;} else {parent.frames['birtViewer2'].location = origUrl+ '&__overwrite=true&productname='+ paravalue;} }</script><a href='' οnclick=' refreshTag (\""+value1+"\")'><i><u><b>" + value1 + "</b></u></i></a>";
- this.text = str;
说明如下:动态文本为显示名称为row["PRODUCTNAME"]的超链接,添加的鼠标单击事件响应为javascript函数refreshTag,为什么用parent.frames['birtViewer2'],不同于jsp的input输入框调用的javascript脚本是直接放置在jsp的顶级document中的,图表和列表的设计先放置到了一个frame中了。
第二列绑定dataSetRow["sales"]
做适当美化,修改属性,插入表头标签,设置背景色,删除表尾,设置单元格格式,加上边框
预览效果如下图:
鼠标事件现在还不能起作用,因为尚未嵌入到jsp中。
新建报表JDBC报表类型,SQL查询类型的空白模板报表trend1.rptdesign,
数据源MyDataSource,采用BIRT设计器自带的例子数据库:
驱动程序类:org.eclipse.birt.report.data.oda.sampledb.Driver (Classic Models Inc. SampleDB Driver)
Database URL:jdbc:classicmodels:sampled
用户名:ClassicModels
数据集TrendDataSet,查询SQL如下:
select CLASSICMODELS.PRODUCTS.PRODUCTNAME,
(CLASSICMODELS.ORDERDETAILS.PRICEEACH * CLASSICMODELS.ORDERDETAILS.QUANTITYORDERED) as sales,
CLASSICMODELS.ORDERS.ORDERDATE
from CLASSICMODELS.ORDERS,
CLASSICMODELS.ORDERDETAILS,
CLASSICMODELS.PRODUCTS
where (CLASSICMODELS.PRODUCTS.PRODUCTCODE = CLASSICMODELS.ORDERDETAILS.PRODUCTCODE)
and (CLASSICMODELS.ORDERS.ORDERNUMBER = CLASSICMODELS.ORDERDETAILS.ORDERNUMBER)
and (CLASSICMODELS.PRODUCTS.PRODUCTNAME = ?)
报表参数productname,字符串静态文本框,
参数:productname
数据类型:字符串
显示类型:文本框
默认值:1992 Ferrari 360 Spider red(此默认值为overall2.rptdesign报表数据集OverallDataSet的数据列dataSetRow ["PRODUCTNAME"]的一个值)
绑定数据集TrendDataSet占位符和报表参数productname,如图
新建一行一列网格,在网格框内插入图表,选择图表类型为折线图,如图,
选择数据,使用以下来源的数据-TrendDataSet,类别(X)系列选择可用列绑定-图表- row["ORDERDATE"],值(Y)系列选择可用列绑定-图表- row["SALES"],如图。
在图表格式中定制X轴,把标签顺时针旋转45度,如图,
同上例,在XML中去掉页脚的日期,完成。
<page-footer>
<text id="3">
<property name="contentType">html</property>
<text-property name="content"><![CDATA[<value-of>new Date()</value-of>]]></text-property>
</text>
</page-footer>
选择图表格式-值Y系列-交互,在系列交互中添加鼠标事件,选择事件-鼠标移过,操作-显示工具条提示,编辑工具提示文本,用表达式生成器添加如下内容"$" + row["SALES"] + " made on " + row["ORDERDATE"],如图
添加鼠标单击事件交互,调用脚本如下:
- var value1=params["productname"].value;
- function refreshTag(paravalue){var origUrl = parent.frames['birtViewer3'].location.toString();var pos = origUrl.indexOf('&__overwrite=true');if (pos > 0) { parent.frames['birtViewer3'].location = origUrl.substr(0, pos) + '&__overwrite=true&productname='+paravalue ;} else {parent.frames['birtViewer3'].location = origUrl+ '&__overwrite=true&productname='+ paravalue;} }
- refreshTag(params["productname"].value);
- var value1=params["productname"].value;
- function refreshTag(paravalue){var origUrl = parent.frames['birtViewer3'].location.toString();var pos = origUrl.indexOf('&__overwrite=true');if (pos > 0) { parent.frames['birtViewer3'].location = origUrl.substr(0, pos) + '&__overwrite=true&productname='+paravalue ;} else {parent.frames['birtViewer3'].location = origUrl+ '&__overwrite=true&productname='+ paravalue;} }
- refreshTag(params["productname"].value);
说明如下:调用脚本内可以定义javascript函数,表达式生成器最终顺序执行
新建报表JDBC报表类型,SQL查询类型的空白模板报表customers.rptdesign,
数据源MyDataSource,采用BIRT设计器自带的例子数据库:
驱动程序类:org.eclipse.birt.report.data.oda.sampledb.Driver (Classic Models Inc. SampleDB Driver)
Database URL:jdbc:classicmodels:sampled
用户名:ClassicModels
数据集CustomersDataSet,查询SQL如下:
select CLASSICMODELS.CUSTOMERS.CUSTOMERNAME,
CLASSICMODELS.ORDERS.ORDERDATE,
(CLASSICMODELS.ORDERDETAILS.PRICEEACH * CLASSICMODELS.ORDERDETAILS.QUANTITYORDERED) as sales
from
CLASSICMODELS.CUSTOMERS,
CLASSICMODELS.PRODUCTS,
CLASSICMODELS.ORDERS,
CLASSICMODELS.ORDERDETAILS
where
(CLASSICMODELS.PRODUCTS.PRODUCTCODE = CLASSICMODELS.ORDERDETAILS.PRODUCTCODE)
and (CLASSICMODELS.ORDERDETAILS.ORDERNUMBER = CLASSICMODELS.ORDERS.ORDERNUMBER)
and (CLASSICMODELS.ORDERS.CUSTOMERNUMBER = CLASSICMODELS.CUSTOMERS.CUSTOMERNUMBER)
and (CLASSICMODELS.PRODUCTS.PRODUCTNAME = ?)
数据集DistributionDataSet,查询SQL如下:
select CLASSICMODELS.CUSTOMERS.CUSTOMERNAME,
sum(CLASSICMODELS.ORDERDETAILS.PRICEEACH * CLASSICMODELS.ORDERDETAILS.QUANTITYORDERED) as sales
from CLASSICMODELS.CUSTOMERS, CLASSICMODELS.ORDERS, CLASSICMODELS.ORDERDETAILS, CLASSICMODELS.PRODUCTS
where (CLASSICMODELS.ORDERS.CUSTOMERNUMBER = CLASSICMODELS.CUSTOMERS.CUSTOMERNUMBER)
and (CLASSICMODELS.ORDERDETAILS.ORDERNUMBER = CLASSICMODELS.ORDERS.ORDERNUMBER)
and (CLASSICMODELS.PRODUCTS.PRODUCTCODE = CLASSICMODELS.ORDERDETAILS.PRODUCTCODE)
and (CLASSICMODELS.PRODUCTS.PRODUCTNAME = ?)
group by CLASSICMODELS.CUSTOMERS.CUSTOMERNAME
order by CLASSICMODELS.CUSTOMERS.CUSTOMERNAME
报表参数productname,字符串静态文本框,
参数:productname
数据类型:字符串
显示类型:文本框
默认值:1992 Ferrari 360 Spider red(此默认值为overall2.rptdesign报表数据集OverallDataSet的数据列dataSetRow ["PRODUCTNAME"]的一个值)
绑定CustomersDataSet和DistributionDataSet数据集的占位符和报表参数。
在编辑器区域,新建一个2行1列的网格,第一个网格插入一个饼图,如图10-30,第二个网格插入一个面积图如图10-31,
饼图选择数据,使用以下来源的数据- DistributionDataSet,类别(X)系列选择可用列绑定-图表- row["CUSTOMERNAME"],值(Y)系列选择可用列绑定-图表- row["SALES"],如图10-32
面积图选择数据,使用以下来源的数据- CustomersDataSet,类别(X)系列选择可用列绑定-图表- row["ORDERDATE"],值(Y)系列选择可用列绑定-图表- row["SALES"],如图10-32,
在饼图的图表格式-值Y系列-交互,在系列交互中添加鼠标事件,选择事件-鼠标单击,操作是调用脚本,脚本内容是alert(valueData),如图
预览的效果如图,
建完这三个报表之后,我们新建test6.jsp,把报表嵌入到jsp的frame中,如下
- <%@ page language="java" contentType="text/html; charset=utf-8"
- pageEncoding="ISO-8859-1"%>
- <%@ taglib uri="/birt.tld" prefix="birt" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <meta http-equiv="Content-Language" content="en-us">
- <title>BIRT JSP Tag Lib Mashup</title>
- <style>
- .pageHeader {
- position: absolute;
- width: 1020px;
- text-align: center;
- color: #224499;
- font-size: xx-large;
- font-weight: bold;
- }
- .mashupContainer {
- position: absolute;
- font-family: Verdana, Tahoma, Arial;
- font-size: 11px;
- border: 1px solid #87AFDA;
- margin: 3px;
- }
- .mashupTitle {
- position: absolute;
- background: #D4E6FC;
- font-size: 14px;
- font-weight: bold;
- color: #224499;
- padding: 3px;
- border-bottom: 1px solid #87AFDA;
- }
- .mashupContent {
- position: absolute;
- padding: 3px;
- }
- </style>
- </head>
- <body>
- <div class="mashupContainer" id="salesChartContainer" style="top: 50px; left: 20px; width: 655px; height: 400px;">
- <div class="mashupTitle" style="width: 99.1%; height: 20px;">overall Chart</div>
- <div class="mashupContent" id="overallDiv" style="top: 24px; left: 0px; width: 99%; height: 380px;">
- <birt:viewer id="birtViewer"
- reportDesign="overall2.rptdesign"
- baseURL="<%= request.getContextPath( )%>"
- pattern="run"
- height="367"
- width="645"
- format="html"
- frameborder="false"
- isHostPage="false"
- isReportlet="true"
- showParameterPage="false"
- >
- </birt:viewer>
- </div>
- </div>
- <div class="mashupContainer" id="salesChartContainer" style="top: 50px; left: 700px; width: 655px; height: 400px;">
- <div class="mashupTitle" style="width: 99.1%; height: 20px;">trend Chart</div>
- <div class="mashupContent" id="trendDiv" style="top: 24px; left: 0px; width: 99%; height: 380px;">
- <birt:viewer id="birtViewer2"
- reportDesign="trend1.rptdesign"
- baseURL="<%= request.getContextPath( )%>"
- pattern="run"
- height="367"
- width="645"
- format="html"
- frameborder="false"
- isHostPage="false"
- isReportlet="true"
- showParameterPage="false"
- >
- </birt:viewer>
- </div>
- </div>
- <div class="mashupContainer" style="top: 500px; left: 20px; height: 650px; width: 1000px;">
- <div class="mashupTitle" style="width: 99.4%; height: 20px;">customers</div>
- <div class="mashupContent" id="customersDiv" style="top: 25px; width: 99%; height: 40px; align: middle; text-align: center;">
- <!-- This example uses the same report design, but this can a different rptdesign file than used above -->
- <birt:viewer id="birtViewer3"
- reportDesign="customers.rptdesign"
- baseURL="<%= request.getContextPath( )%>"
- pattern="run"
- height="615"
- width="990"
- format="html"
- frameborder="false"
- isHostPage="false"
- isReportlet="true"
- showParameterPage="false"
- >
- </birt:viewer>
- </div>
- </div>
- </body>
- </html>
- <%@ page language="java" contentType="text/html; charset=utf-8"
- pageEncoding="ISO-8859-1"%>
- <%@ taglib uri="/birt.tld" prefix="birt" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <meta http-equiv="Content-Language" content="en-us">
- <title>BIRT JSP Tag Lib Mashup</title>
- <style>
- .pageHeader {
- position: absolute;
- width: 1020px;
- text-align: center;
- color: #224499;
- font-size: xx-large;
- font-weight: bold;
- }
- .mashupContainer {
- position: absolute;
- font-family: Verdana, Tahoma, Arial;
- font-size: 11px;
- border: 1px solid #87AFDA;
- margin: 3px;
- }
- .mashupTitle {
- position: absolute;
- background: #D4E6FC;
- font-size: 14px;
- font-weight: bold;
- color: #224499;
- padding: 3px;
- border-bottom: 1px solid #87AFDA;
- }
- .mashupContent {
- position: absolute;
- padding: 3px;
- }
- </style>
- </head>
- <body>
- <div class="mashupContainer" id="salesChartContainer" style="top: 50px; left: 20px; width: 655px; height: 400px;">
- <div class="mashupTitle" style="width: 99.1%; height: 20px;">overall Chart</div>
- <div class="mashupContent" id="overallDiv" style="top: 24px; left: 0px; width: 99%; height: 380px;">
- <birt:viewer id="birtViewer"
- reportDesign="overall2.rptdesign"
- baseURL="<%= request.getContextPath( )%>"
- pattern="run"
- height="367"
- width="645"
- format="html"
- frameborder="false"
- isHostPage="false"
- isReportlet="true"
- showParameterPage="false"
- >
- </birt:viewer>
- </div>
- </div>
- <div class="mashupContainer" id="salesChartContainer" style="top: 50px; left: 700px; width: 655px; height: 400px;">
- <div class="mashupTitle" style="width: 99.1%; height: 20px;">trend Chart</div>
- <div class="mashupContent" id="trendDiv" style="top: 24px; left: 0px; width: 99%; height: 380px;">
- <birt:viewer id="birtViewer2"
- reportDesign="trend1.rptdesign"
- baseURL="<%= request.getContextPath( )%>"
- pattern="run"
- height="367"
- width="645"
- format="html"
- frameborder="false"
- isHostPage="false"
- isReportlet="true"
- showParameterPage="false"
- >
- </birt:viewer>
- </div>
- </div>
- <div class="mashupContainer" style="top: 500px; left: 20px; height: 650px; width: 1000px;">
- <div class="mashupTitle" style="width: 99.4%; height: 20px;">customers</div>
- <div class="mashupContent" id="customersDiv" style="top: 25px; width: 99%; height: 40px; align: middle; text-align: center;">
- <!-- This example uses the same report design, but this can a different rptdesign file than used above -->
- <birt:viewer id="birtViewer3"
- reportDesign="customers.rptdesign"
- baseURL="<%= request.getContextPath( )%>"
- pattern="run"
- height="615"
- width="990"
- format="html"
- frameborder="false"
- isHostPage="false"
- isReportlet="true"
- showParameterPage="false"
- >
- </birt:viewer>
- </div>
- </div>
- </body>
- </html>
部署到服务器上,运行效果如下:
切记,这三个报表的参数一定要有默认值,否则在页面初始化的时候会报出缺失参数值的错误。
单击左上的列表的超链接,右上会根据商品名称刷新,单击右上的折线图的点,下面的饼图和面积图都会刷新。如果在javascript脚本中做多个frame的刷新,反映到页面上就是一个鼠标事件刷新了多个frame。