1. 问题描述
在报表开发工具FineReport中,若有几张不同的报表,每张报表都有一个共同的项可以选择,比如日期时间。我们希望选择了第一张报表的时间之后,其他报表的默认时间都变为第一张报表选择的时间,此时要如何实现呢?
2. 实现思路
可以利用给session赋值来实现。给第一张报表的参数控件增加通过ajax的url将值传递给后台的servlet的编辑后事件,servlet获取ajax传递的值并将其保存到session中,后面的报表在参数的控件值处通获取session值即可。
3. 实现步骤
3.1 Ajax传值设置
随便打开一张带参数的模版,如打开模版:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Primary\Parameter\Parameter.cpt。
点击参数界面,将控件设置未文本框控件,给文本框控件增加编辑后事件,具体的js如下:
1.var str=this.getValue(); //获取当前控件的值 2.FR.ajax({ 3. url: "servlet/session?id="+FR.cjkEncode(str), //将值传递给session这个servlet中 });
注:如果想要预览报表的同时将数据也写入到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. { 19. response.setContentType("text/html; charset=gb2312"); 20. 21. PrintWriter out = response.getWriter(); 22. out.println("<html>"); 23. out.println("<body>"); 24. String urlid=request.getParameter("id"); //获取url通过ajax传递的值 25. HttpSession session=request.getSession(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. if(request.getParameter("sessionvalue")!=null&&request.getParameter("sessionvalue")!=""){ 34. session.setAttribute("sessionname", request.getParameter("sessionvalue")); 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\下的web.xml,加入如下代码:
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文件放置在对应位置下之外,web.xml文件中的servlet-class标签也需要修改,比如说修改为com.fr.data.session。
3.4 获取session值
在另外一个参数模版如%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Primary\Parameter\Parameter1.cpt将数据集中地区参数的默认值华北删除,并且参数控件的控件值中选择公式并输入$sessionname(servlet中session的名字),如下图:
注:sessionname是指java类中的sessionname。
3.5 效果查看
分页预览parameter.cpt,在文本框中输入中国后,再预览parameter1.cpt,可以看到文本框中显示的是中国了,如下图:
相关推荐
14. 数据共享:在Web应用程序中,Application和Session对象可以在不同网页间共享数据,而Response和Request对象则用于页面间的通信。 15. RAM:RAM(Random Access Memory)是计算机中的临时存储器,用于存储运行中...
- **详细解释**:在 Access 中创建分组报表时,通常使用报表设计视图来实现,因此选项 D “报表设计视图”是正确的。 ### 24. Access 的适用范围 - **知识点**:Microsoft Access 的应用范围。 - **详细解释**:...
1. 对象在网页间共享数据:`application` 和 `session` 对象分别代表了全局变量(在整个应用程序中有效)和会话变量(在同一用户的不同请求之间有效),它们是Web应用程序中实现数据共享的两种常见方式。 2. 程序...
报表设计是指在报表设计视图中进行报表布局和修改。在Java中,创建数组的正确方式不包括在数组声明时直接赋值。软件调试技术包括错误推断、回溯法等,而集成测试是属于软件测试的一种。局域网的性能关键在于网络的...
8. Session 对象的有效期:在Web开发中,Session对象默认的有效期通常为20分钟。 9. 软件测试的目的:软件测试的目的是尽可能多地发现并修复程序中的错误,而不是证明程序的正确性或使其结果正确。 10. Windows98 ...
- **共享数据的对象**:在Web应用程序中,`application` 和 `session` 对象可以在同一应用程序的不同网页间共享数据。 ### 18. HTML 超链接标记 - **超链接定义**:在HTML中,超链接由 `<a>` 标签定义。 ### 19. ...
线程间的通信是实现并发处理的关键,可以通过共享内存、消息传递等方式进行。 2. **Java内存模型**:在Java语言中,双精度浮点型(double)变量占据8个字节的内存空间。 3. **Access数据库类型**:Access是一款...
6. Session对象:在Java Web开发中,不同的servlet可以访问同一个用户的session对象,它们之间是共享的。 7. JFileChooser类:JFileChooser是Java Swing包中的一个类,用于实现文件选择对话框,用户可以通过它获取...
9. 只希望在多个页面间共享数据,可以使用session作用域。 10. 内层循环体S语句在给定的循环结构中会执行n*(n-1)/2次,因此正确答案是C。 11. 二维表的每一行表示关系的一个记录,记录是数据的基本单位。 12. ...
18. 要在多个页面间共享数据,通常使用`session`作用域,因为请求(request)作用域只限于一次HTTP请求,而session作用域在整个会话期间有效。 19. Word2003的文档目录和索引功能,需要先使用合适的样式标记标题和...
8. 赋值语句:在VBScript或其他类似的脚本语言中,可以将两个文本框的文本合并,如Text1.Text = Text1.Text + Text2.Text。 9. 表单事件:Init事件在表单创建时触发,用于初始化表单。 10. 宏操作:定义宏时,可以...
在Web开发中,`application`和`session`对象可以实现在同一应用程序的不同网页间共享数据。`response`和`request`对象分别用于响应和请求数据,不是用来共享数据的。 ### 14. 方法覆盖 **题目描述**:方法能否被...
11. 可以在不同网页间共享数据的对象是Application和Session(AD)。在Web开发中,这两个对象分别用于在整个应用程序范围内和单个用户会话期间存储数据。 12. OLE对象数据类型可以存放链接或嵌入的二进制数据(C)...
14. 在JSP中,要在b.jsp中获取a.jsp的loginName值,可以使用请求转发(RequestDispatcher)或使用session对象传递。 15. 文本框中选定的内容可以通过SelText属性获取。 16. 文件列表框(FileListBox)的Filter属性...
8. ActionEvent 对象通常在Java Swing组件中使用,当用户触发动作事件(如点击按钮)时,该对象会被传递给 `actionPerformed()` 方法。 9. Session 和 Cookie 是Web应用中管理用户状态的机制。Session 存储在服务器...
3. Servlet 会话管理:在一个应用中,同一用户的各个servlet中获取到的session对象是相同的,只要sessionID未失效。 4. 对象间通信:对象间的交互通常通过发送消息实现,对象通过调用另一对象的方法来请求服务。 5...
在VB.NET或ASP.NET中,变量的赋值遵循从右到左的规则。例如: `; a=a+5%>` 执行完这段代码后,变量a的值为8。 3. `Request.ServerVariables`集合: `Request.ServerVariables`集合用于获取服务器环境变量,如...
- 高位值在同一个程序中保持一致,而在不同的程序间则不同。 #### 七、性能优化 - **高位/低位值算法**: - 通过分配高位值来确保每个应用实例生成的OID是唯一的。 - **自动赋值**: Hibernate可以根据配置自动为...
4. 在Web开发中,`request`和`session`作用域用于在多个页面间共享数据。`request`作用域的数据只在一次请求内有效,而`session`作用域的数据在整个会话期间有效。 5. Windows 98的“附件”中包含“画图”软件,...