首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

JSP传参数给Birt的两种步骤 转

2013-11-08 
JSP传参数给Birt的两种方法转}else {?? this.queryText + where sample + sample }4、如此设置之后就

JSP传参数给Birt的两种方法 转
}
else {
?? this.queryText +=" where sample=" + sample ;
}4、如此设置之后就不用再data set里面设置data set参数。???另一种实现方式:

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

jsp代码

[html] view plaincopy
  1. <script?type="text/javascript">????????function?search(){?????
  2. ????????var?st?=?document.getElementById("st").value;//开始日期?????????????var?et?=?document.getElementById("et").value;//结束日期?????
  3. ????????window.location.href?=?"run?__report=reports/new_report.rptdesign&__parameterpage=false&st="+st+"&et="+et;??????????????????????
  4. ????}?????????function?print(){?????
  5. ????????var?st?=?document.getElementById("st").value;//开始日期?????????????var?et?=?document.getElementById("et").value;//结束日期?????
  6. ????????window.location.href?=?"frameset?__report=reports/new_report.rptdesign&__parameterpage=false&st="+st+"&et="+et;??????????????????????
  7. ????}?????</script>????
  8. ??</head>???????????
  9. ??<body>????????<input?type="text"?name="st"?id="st"><br>????
  10. ????<input?type="text"?name="et"?id="et"><br>?????????????<input?type="button"?value="?查?询?"?onclick="search()">????
  11. ????<input?type="button"?value="?打?印?"?onclick="print()">??????</body>????

?注: 当点击 查询? 按钮时 用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代码[java] view plaincopy
  1. importPackage(Packages.java.io,Packages.java.util,Packages.java.net);?????importPackage(Packages.javax.servlet.http);?????
  2. request=reportContext.getHttpServlet();?????var?session?=?request.getSession();??????
  3. 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代码[java] view plaincopy
  1. String?contextKey?=?"whereClause";?????????????request.getSession().setAttribute("AppContextKey",?contextKey);?????
  2. ????????request.getSession().setAttribute("AppContextValue",?sql);????

在report中用

beforeOpen中取出即可

?????

如何把java代码中参数传递给报表?在报表中又怎样获取这个参数?
答:通过这种方式给报表传参:
HashMap paramMap = new HashMap();
paramMap.put("birtparam1", 1);
paramMap.put("birtparam2", 5);
task.setParameterValues(paramMap);

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

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

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

热点排行