博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSP传参数给Birt的两种方法
阅读量:4054 次
发布时间:2019-05-25

本文共 2397 字,大约阅读时间需要 7 分钟。

关于给报表传值:

如果你不使用birt viewer的话,那就是使用api调你的报表,birt api有设置参数的api.

如果使用birt viewer,直接通过url或者使用birt 标签都是可以的。

 

本文只是用jsp的url方式传递参数给birt报表,然后在birt的sql语句里面使用:

一、第一个中方法:

1、在jsp的URL里面添加所要传递的参数:

http://localhost:8080/birt-web/frameset?__report=test.rptdesign&sample=my+parameter

2、在报表当中添加同名报表参数sample,然后可以添加data set参数关联到报表参数sample,这样data set参数就可以得到从jsp页面传递过来的参数从而作为查询条件。

二、第二种方法:

1、在jsp的URL里面添加所要传递的参数:

http://localhost:8080/birt-web/frameset?__report=test.rptdesign&sample=my+parameter

2、在报表当中添加同名报表参数sample
3、点击 Date Sets,在点中间的"Script"标签,选择BeforeOpen,写上
var sample = params["sample"].value;
if(isample=="null"){
   this.queryText +="where 1=1" ;
}
else {
   this.queryText +=" where sample=" + sample ;
}
4、如此设置之后就不用再da
ta set里面设置da
ta set参数。
 
 
 
另一种实现方式:

1.jsp页面设置几个需要传递参数的文本框

jsp代码

                   
 
注: 当点击 查询  按钮时 用js指定转到的url
 (window.location.href = "run?__report=reports/new_report.rptdesign&__parameterpage=false&st="+st+"&et="+et;)
    (1)run(只能显示, 没有打印, 分页等功能): 和普通的html页面显示的效果一样,样式需要在报表中设计, 改成frameset则有所有功能
    (2)参数:st(起始日期), et(结束日期)

2. rptdesign文件设置

(1).报表参数

 Name   Data type   Display     Display As--Format as       

  st           Data       Text Box     Custom:yyyy-MM-dd

  et           Data       Text Box     Custom:yyyy-MM-dd

(2).数据集参数

 Name    Data Type    Direction    Defalut Value    Linked To Report Paramter
   st         Date               Input           N/A                            st
   et         Date               Input           N/A                            et
(3).数据集sql(时间从 ? 到 ? 的时间段的记录)
 select * from tabelName where tbtime betweem ? and ?

 
 
 
 
 
 
 

原来用URL方式向Birt进行参数传递,发现二个问题

1.需要用urldecode进行二次处理,麻烦;

2.参数长度有限制,恶心。遇到长一点参数就没有办法了;

 

后来就考虑在script中通过session 参数进行传递

Java代码
importPackage(Packages.java.io,Packages.java.util,Packages.java.net);   importPackage(Packages.javax.servlet.http);   request=reportContext.getHttpServlet();   var session = request.getSession();    status = session.getAttribute("whereClause");

 结果发现request始终是null,原因是此request不同于javax下的request,其实经过Java处理也是可以实现,但我觉得太烦了。

研究了N久发现了通过

Adding an Object to the Application Context for the Viewer

中利用appcontext的方法传递数据。终于成功简单的处理了Birt web参数传递。而且传递的内容和长度和java一致。

Java代码
String contextKey = "whereClause";           request.getSession().setAttribute("AppContextKey", contextKey);           request.getSession().setAttribute("AppContextValue", sql);
在report中用

beforeOpen中取出即可

 
 
 
 
 

如何把java代码中参数传递给报表?在报表中又怎样获取这个参数?

答:通过这种方式给报表传参:
HashMap paramMap = new HashMap();
paramMap.put("birtparam1", 1);
paramMap.put("birtparam2", 5);
task.setParameterValues(paramMap);

设置报表参数与传递的参数同名,这样就关联起来了

数据集参数与报表参数绑定

sql语句中的“?”号对应数据集参数

转载地址:http://votci.baihongyu.com/

你可能感兴趣的文章
Spark2.x 如何实现自定义排序(利用元组,类--隐式转换Ordering,Ordered等实现)
查看>>
Spark配置参数
查看>>
使用kafkachannel 启动flume报错
查看>>
Git常用命令
查看>>
ssh 如何方便的切换到其他节点??
查看>>
rank() over,dense_rank() over,row_number() over的区别
查看>>
只要你要,只要我有
查看>>
常用数据库的JDBC驱动程序写法
查看>>
回溯法迷宫求解
查看>>
JSP中文乱码总结
查看>>
AspectJ下载和安装
查看>>
Java-IO-File类
查看>>
Java-IO-java的IO流
查看>>
Java-IO-字节流和字符流
查看>>
Java-IO-输入/输出流体系
查看>>
Java实现DES加密解密
查看>>
HTML基础
查看>>
Java IO
查看>>
Java NIO
查看>>
Java 泛型
查看>>