熊伟
骑士
骑士
  • UID339
  • 粉丝3
  • 关注1
  • 发帖数21
  • 社区居民
  • 忠实会员
阅读:29236回复:1

平台的图形化报表数据源能不能调用Servlet?

楼主#
更多 发布于:2017-08-08 15:59
我知道图形化报表的数据源是通过配置数据查询id来查询数据库中的数据,但是现在的需求是通过调用一个自定义的Servlet来显示这个图形化报表,想知道能不能实现?


或者能不能把数据传给前台后,以一个js的方法动态添加给图形化报表插件?

最新喜欢:

周净周净 刘星星刘星星
熊伟
骑士
骑士
  • UID339
  • 粉丝3
  • 关注1
  • 发帖数21
  • 社区居民
  • 忠实会员
沙发#
发布于:2017-08-10 22:52
终于解决了……


解决过程:
   1、新建一个正确的图表来运行,然后打开页面的源码;

图片:1.png



2、找到图表Panel所在位置,有一个属性dataUrl=“./data/ChartData.svt?chartId=XXXX”,这实际上就是一个Servlet地址,在页面加载的时候会请求这个Servlet,把返回的数据解析再绘图

图片:2.png



3、自定义Servlet作为数据源最重要的,也是最麻烦的,就是封装传给页面的数据,这里先来看一下平台的可视化开发中已经封装好的传给页面的数据是怎样的,然后就可以参考此数据自行封装;
   打开一个可以运行的图表页面,打开浏览器开发者工具,找到这里,

图片:3.png


点开,可以看到浏览器与服务器之间传递的数据;这里我们重点关注三个:

图片:4.png



  • Request Method为浏览器发送给服务器的请求,为post;
  • Content-Type为服务器的返回数据类型 text/text;
  • 还有最重要的就是用于绘图的数据了,在这里:
  • 图片:5.png


  • 但这里是经过浏览器格式化了的,我们看这里返回的原数据:
  • 图片:6.png


  • 把这些复制到一个能格式化JSON数据的编辑器里面,
  • 图片:7.png


  • 从这里可以看出数据为json格式的字符串;
4、好了,到这里准备工作就做好了。进入正题:新建一个Servlet,注意事项就不多说了,论坛里面有,然后重写doGet和doPost方法;在doPost方法体里面写要执行的代码,主要有几点:
  1. 一定要是doPost执行你写的方法,因从上面可以看到浏览器发出的请求是post,写到doGet里面是会报405错误的!!!(知道我纠结这个问题好久不???!!)
  2. 设置response的返回参数:resp.setContentType("text/plain; charset=utf-8");
  3. 数据库查询数据
  4. 封装数据(这个真的麻烦,我写了好久!!!),这个看你自己的业务需求,我的方法:傻子才会自己拼装字符串,可以new出n个Map对象(或者List),从最低层一层一层的put,然后利用Gson工具包,转换为json格式的字符串:Gson gson = new Gson();String result = gson.toJson(root);
  5. PrintWriter返回数据
5、再将页面的源码属性:dataUrl改成自己写的Servlet地址;
6、OK,大功告成!
游客

返回顶部