报表名称为中文时报找不到模板文件
1. 问题描述
当预览某张报表(报表模板名称命名为中文)时,在浏览器中直接输入url访问该报表时可能会出现报错,但是从设计器中直接点击分页预览等,却不会出现问题。
比如在URL中输入访问某张报表,如http://localhost:8080/WebReport/ReportServer?reportlet=参数.cpt ,就会报如下错误信息:
2. 问题原因
因为每个浏览器的编码是不一样的,所以要通过设置服务器端的url编码,来实现服务器的编码和浏览器的编码一致。
为什么这样的中文模板,在设计器中点击分页预览等,却不会出现如上的问题。
原因是设计器中的分页预览那边是FR的设计器封装的代码中通过cjkEncode方式解析处理了中文,你会看到设计器中访问的中文命名的模板(参数.cpt)变为[4f20][53c2].cpt,即已经处理其中的中文名称,正常预览模板的效果,如下:
3. 解决方案
建议使用英文模板名称
3.1 直接在浏览器中输入
修改web服务器下面的server.xml配置文件,在Connector属性里面添加:URIEncoding="GB2312"或是URIEncoding="utf-8",其中GB2312对应IE和火狐浏览器,utf-8对应谷歌浏览器,设置完就可以直接通过URL输入访问中文名的模板和传递中文参数。
下面以tomcat为例,可以通过修改conf下的server.xml文件实现URL中的中文传参,在server.xml下找到如下代码:Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"中加入URIEncoding="GB2312",成功tomcat服务器,通过url访问中文模板就可以成功访问到了。其它的服务器的解决方案类似,只要在对应的地方加上url编码。
3.2 集成到项目中
使用FR.cjkEncode("中文名称")方式进行转换就可以解决,具体可参考编码转换章节内容。 注:用户集成到自己的系统后,都是讲报表嵌入在系统页面中的,而不是直接在浏览器栏输入,以上情况只发生在未集成测试之时。