反饋已提交

網絡繁忙

給session賦值實現報表間參數共享

一、概述

1
問題描述。
  1. 有幾張不同的報表,希望某一張報表的日期元件選擇好日期後,其他報表日期元件的參數都變成該日期,那麼該如何實現呢?

2
實現思路。
  1. 可以利用 Session 賦值來實現。給某一張報表的參數元件新增一個透過 AJAX 的 URL 將值傳遞給後臺的 servlet 編輯後事件,servlet 獲取 AJAX 傳遞的值並將其儲存到 Session 中,後面的報表在參數的元件值處通獲取 Session 值即可。

注:該方案不支援叢集。

二、操作步驟

1
AJAX 傳值設定。
  1. 開啟一張帶參數的範本,如開啟範本:【%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doctw\Primary\Parameter\Parameter.cpt】。點擊參數介面,將元件設定為文字元件,如下圖所示。

  2. 給文字元件增加【編輯後事件】。

  3. JavaScript 代碼如下所示。

注:如果想要預覽報表的同時將資料也寫入到 Session 中,而不需要非同步載入,可以再 AJAX 下面加上【async:false】。

var str=this.getValue();    //獲取當前元件的值
FR.ajax({  
   url: "/webroot/session/report?id="+encodeURIComponent(str)  //將值傳遞給 Session 這個 Servlet 中
});

1.jpg

2
獲取值並儲存至 Session。
  1. 建立一個名為 Session 的類,具體的代碼如下。

  2. 編譯【session.java】類,將編譯好的【session.class】放置在【%FR _HOME%\webapps\webroot\WEB-INF\classes\com\fr\data】目錄下。

package com.fr.data;


import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.String;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fr.stable.CodeUtils;


public class session extends HttpServlet {
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
            throws IOException, ServletException
    {
        response.setContentType("text/html; charset=gb2312");


        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<body>");
        String urlid=request.getParameter("id");  //獲取url透過ajax傳遞的值
        HttpSession session=request.getSession(true);
        if(urlid==""||urlid==null){
            out.print("<form action=\"");
            out.print("session\" ");
            out.println("method=POST>");
            out.println("set session:<input type=text name=sessionvalue>");
            out.println("<input type=submit name=bbb value=tijiao>");
            out.println("</form>");
            if(request.getParameter("sessionvalue")!=null&&request.getParameter("sessionvalue")!=""){
                session.setAttribute("sessionname", request.getParameter("sessionvalue"));
            }
        }
        else{
            urlid = CodeUtils.decodeText(urlid);
            session.setAttribute("sessionname",urlid);  //將值賦值給sessionname這個session中
            out.println("<script language='javascript'>window.close();</script>");
        }
        out.println("</body>");
        out.println("</html>");
    }
    public void doPost(HttpServletRequest request,
                       HttpServletResponse response)
            throws IOException, ServletException
    {
        doGet(request, response);
    }
}
3
配置存取 Session 賦值的 Servlet。
  1. 在【%FR _HOME%\webroot\WEB-INF\】下的建立【web.xml】檔案,加入如下代碼。

注:在編寫 Java 類檔案的時候,如果是儲存在某個具體的包下面,比如說【com/fr/data】下面,那麼除了需要將 class 檔案放置在對應位置下之外,【web.xml】檔案中的【servlet-class】標籤也需要修改,比如說修改為【com.fr.data.session】。

<?xml version="1.0" encoding="UTF-8"?>
<web-app
   xmlns="http://java.sun.com/xml/ns/j2ee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
   version="2.4">
  <display-name>Template WebApp</display-name>
    <mime-mapping>
  <extension>msi</extension>
  <mime-type>application/x-msi</mime-type>
  </mime-mapping>
  <servlet>
    <servlet-name>session</servlet-name>
    <servlet-class>com.fr.data.session</servlet-class>
    <load-on-startup>2</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>session</servlet-name>
    <url-pattern>/session/*</url-pattern>
  </servlet-mapping>
</web-app>
4
獲取 Session 值。
  1. 在另外一個參數範本如【%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doctw\Primary\Parameter\Parameter1.cpt】將資料集中【地區】參數的預設值【華北】刪除,並且參數元件的元件值中選擇公式並輸入【$sessionname】(Servlet 中 Session 的名字),如下圖所示。

注:sessionname 是指 Java 類中的 sessionname。

2.jpg

5
效果查看。
  1. 由於設計器內建的 Tomcat 現在不讀【web.xml】檔案,因此需要將工程部署到外置Tomcat 中。

  2. 填報預覽【parameter.cpt】,在正文框中輸入【中國】後,再預覽【parameter1.cpt】,可以看到正文框中顯示的是【中國】了,如下圖所示。

3.gif


附件列表


主題: 部署集成
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙