zoukankan      html  css  js  c++  java
  • Web报表页面如何传递中文参数


    1、场景描述

    在用报表开发工具FineReport设计的web报表中,给iframe设置src嵌入某个报表时,往往会给报表传递初始的参数值,例如:

    <iframe id="reportFrame" width="900" height="400" src="/WebReport/ReportServer?reportlet=/report.cpt&参数1=参数值&参数2=参数值..."></iframe>  

    若参数名称、参数值甚至报表名称中包含中文或者特殊字符时,如果不进行编码转换,可能会出现一系列问题。比如下图:



     

    今天我就来讲讲该如何如何传递中文参数。

    2、使用cjkEncode对中文进行编码转换

    使用cjkEncode对调用报表的路径或参数进行编码,报表获取到参数后会自动进行解码,保证不会出现乱码等一系列情况。

    cjkEncode是FR内部封装好的编码方法,在js中使用cjkEncode有两种方式,该节我们举例介绍。

    2.1加载finereport.js使用cjkEncode

    cjkEncode方法在FineReport的JS库中已经预先提供了,用户可以在自己的网页中引入FineReport的JS库,就可以使用FR.cjkEncode对中日韩文字符进行编码,如下对调用报表的url进行cjkEncode:

    1.      <html>    

    2.        <head>    

    3.        <title>FineReport Demo</title>    

    4.        <meta http-equiv="Content-Type" content="text/html; charset=GBK" />    

    5.        <script type="text/javascript" src="/WebReport/ReportServer?op=emb&resource=finereport.js"></script>  

    6.        <script language="javascript">  

    7.          function autoLoad(){  

    8.            var addr = FR.cjkEncode("/WebReport/ReportServer?reportlet=/doc/Primary/Parameter/Parameter.cpt&地区=华东");  

    9.            document.getElementById("reportFrame").src = addr;  

    10.      }  

    11.      window.onload = autoLoad;   

    12.    </script>  

    13.    </head>    

    14.    <body>    

    15.      <iframe id="reportFrame" width="900" height="400" ></iframe>    

    16.    </body>  

    17.  </html>  

    finereport.js使用的是jquery框架,若用户也使用了jquery,可能会造成冲突,这时建议不要引入finereport.js,而是将cjkEncode方法拷贝到页面中直接使用,详见下面的方法。

    已完成示例请参照%FR_HOME%WebReport|page_demoparameter_ch.html

    2.2直接调用cjkEncode

    加载finereport.js再引用cjkEncode,一方面可能会引起js冲突,另一方面也加载了很多不必要的方法。

    若用户只需要使用该方法,可以将cjkEncode实现的代码复制到网页中或者用户自己的js文件中,然后再引用cjkEncode。

    1.     <html>  

    2.       <head>    

    3.       <title>FineReport Demo</title>    

    4.       <meta http-equiv="Content-Type" content="text/html; charset=GBK" />    

    5.       <script type="text/javascript">  

    6.         //cjkEncode方法的实现代码,放在网页head中或者用户自己的js文件中  

    7.         function cjkEncode(text) {                                                                            

    8.           if (text == null) {         

    9.             return "";         

    10.        }         

    11.        var newText = "";         

    12.        for (var i = 0; i < text.length; i++) {         

    13.          var code = text.charCodeAt (i);          

    14.          if (code >= 128 || code == 91 || code == 93) {  //91 is "[", 93 is "]".         

    15.            newText += "[" + code.toString(16) + "]";         

    16.          } else {         

    17.            newText += text.charAt(i);         

    18.          }         

    19.        }         

    20.        return newText;         

    21.      }     

     





  • 相关阅读:
    Hander
    N皇后问题--递归回溯
    NYOJ-571 整数划分(三)
    递归--递推之组合数
    深搜最基础题---全排列And组合数
    递归---NYOJ-176 整数划分(二)和NYOJ-279队花的烦恼二
    递归---NYOJ-90整数划分(一)
    线段树---HDU2795Billboard
    输入输出外挂
    线段树---HDU1394Minimum Inversion Number
  • 原文地址:https://www.cnblogs.com/liang123/p/6325079.html
Copyright © 2011-2022 走看看