您的位置:首页 > 其它

Web报表页面如何传递中文参数

2018-02-08 17:49 246 查看
1、场景描述

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

  

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



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

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

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

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

2.1加载finereport.js使用cjkEncode

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17
1.      <</code>html
>    


2.        <</code>head
>    


3.        <</code>title
>FineReport Demo</</code>title
>    


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


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


6.        <</code>script
 
language
=
"javascript"
>  


7.          function autoLoad(){  


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


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


10.      }  


11.      window.onload = autoLoad;   


12.    </</code>script
>  


13.    </</code>head
>    


14.    <</code>body
>    


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


16.    </</code>body
>  


17.  </</code>html
>


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

已完成示例请参照%FR_HOME%\WebReport|page_demo\parameter_ch.html

2.2直接调用cjkEncode

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21
1.     <</code>html
>  


2.       <</code>head
>    


3.       <</code>title
>FineReport Demo</</code>title
>    


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


5.       <</code>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.      }


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: