在报表中给session赋值实现报表间参数共享
1.问题描述
在报表开发工具FineReport中,若有几张不同的报表,每张报表都有一个共同的项可以选择,比如日期时间。我们希望选择了第一张报表的时间之后,其他报表的默认时间都变为第一张报表选择的时间,此时要如何实现呢?
2.实现思路
可以利用给session赋值来实现。给第一张报表的参数控件增加通过ajax的url将值传递给后台的servlet的编辑后事件,servlet获取ajax传递的值并将其保存到session中,后面的报表在参数的控件值处通获取session值即可。
3.实现步骤
3.1Ajax传值设置
随便打开一张带参数的模版,如打开模版:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Primary\Parameter\Par ameter.cpt。
点击参数界面,将控件设置未文本框控件,给文本框控件增加编辑后事件,具体的js如下:
1.var Value();//获取当前控件的值
2.FR.ajax({
3.url:"servlet/session?id="+FR.cjkEncode(str),//将值传递给session
这个servlet中
4.});
注:如果想要预览报表的同时将数据也写入到session中,而不需要异步加载,可以再ajax下面加上async:false。
3.2获取值并保存至Session
新建一个名为session的类,具体的代码如下:
1.import javax.servlet.http.HttpSession;
2.import java.io.IOException;
3.import java.io.PrintWriter;
4.import java.util.ResourceBundle;
5.import java.lang.String;
6.import javax.servlet.ServletException;
7.import javax.servlet.http.HttpServlet;
8.import javax.servlet.http.HttpServletRequest;
9.import javax.servlet.http.HttpServletResponse;
10.
11.import com.fr.stable.CodeUtils;
12.import com.fr.web.utils.WebUtils;
13.
14.public class session extends HttpServlet{
15.public void doGet(HttpServletRequest request,
16.HttpServletResponse response)
17.throws IOException,ServletException
18.{
20.
21.PrintWriter Writer();
el表达式获取session中的值
22.out.println("<html>");
23.out.println("<body>");
24.String Parameter("id");//获取url通过ajax传递
的值
25.HttpSession Session(true);
26.if(urlid==""||urlid==null){
27.out.print("<form action=\"");
28.out.print("session\"");
29.out.println("method=POST>");
30.out.println("set session:<input type=text name=sessionvalue>");
31.out.println("<input type=submit name=bbb value=tijiao>");
32.out.println("</form>");
33.Parameter("sessionvalue")!=null&&Para
meter("sessionvalue")!=""){
34.session.setAttribute("sessionname",Parameter("sess
ionvalue"));
35.}
36.}
37.else{
38.urlid=CodeUtils.decodeText(urlid);
39.session.setAttribute("sessionname",urlid);//将值赋值给
sessionname这个session中
40.out.println("<script language='javascript'>window.close();<
/script>");
41.}
42.out.println("</body>");
43.out.println("</html>");
44.}
45.public void doPost(HttpServletRequest request,
46.HttpServletResponse response)
47.throws IOException,ServletException
48.{
49.doGet(request,response);
50.}
51.}
编译session.java类,将编译好的session.class放置在%FR _HOME%\WebReport\WEB-INF\classes目录下。
3.3配置访问session赋值的Servlet
打开%FR_HOME%\WebReport\WEB-INF\下的l,加入如下代码:
1.<servlet>
2.<servlet-name>session</servlet-name>
3.<servlet-class>session</servlet-class>
4.</servlet>
5.
6.<servlet-mapping>
7.<servlet-name>session</servlet-name>
8.<url-pattern>/servlet/session</url-pattern>
9.</servlet-mapping>
注:在编写java类文件的时候,如果是保存在某个具体的包下面,比如说com/fr/data 下面,那么除了需要将class文件放置在对应位置下之外,l文件中的servlet-class 标签也需要修改,比如说修改为com.fr.data.session。
3.4获取session值
在另外一个参数模版
如%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Primary\Parameter\Para meter1.cpt将数据集中地区参数的默认值华北删除,并且参数控件的控件值中选择公式并输入$sessionname(servlet中session的名字),如下图:
注:sessionname是指java类中的sessionname。
3.5效果查看
分页预览parameter.cpt,在文本框中输入中国后,再预览parameter1.cpt,可以看到文本框中显示的是中国了,如下图:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。