首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

GridReport表格数据解析及传递,struts自定义result的重要性

2012-06-30 
GridReport报表数据解析及传递,struts自定义result的重要性最近参与的项目,很多的地方都是需要报表的,因为

GridReport报表数据解析及传递,struts自定义result的重要性

最近参与的项目,很多的地方都是需要报表的,因为牵扯各地区的费用及信息广泛。所以光报表就有200多张。看最近项目里报表编写的代码,有些想法,所以记录下来,一是分享,是自己也想吸收大家的意见。
(注:这篇文章,不是讲某种报表的配置方法,而是报表应该怎么传输数据,更方便、快捷、有效的一种方案,有什么不足之处,提出来虚心受教,请不要谩骂)

?

1.大家都知道,报表有很多种,图形报表FusionCharts、锐浪GridReport,数据如何和报表相关(JS文件中有函数),文档中依然写明,不多做阐述。

?

2.比如FusionCharts的图形报表,它的数据和flash图形文件的数据关联,有xml文件,JSON格式数据。

以上两种方法我个人是不建议使用,xml文件的使用占空间,数据量的大的时候,io操作异常频繁。

JSON格式,数据传输的时候较为麻烦。

?

3.其实在各种报表的文档中已有方法。就是将xml文件的内容,解析成字符串的形式,但其格式仍然是xml文件内容的格式。只是将xml文件写成一个字符串。

?

4.正题来了,就是在什么地方将数据转换成报表所需要的数据格式呢?

我看过一些报表,有得人,将数据的格式写成js的变量。

var dataString ='<chart yAxisName="Sales Figure" caption="Top 5 Sales Person" numberPrefix="$" useRoundEdges="1" bgColor="FFFFFF,FFFFFF" showBorder="0">\n\<set label="Alex" value="25000"  /> \n\<set label="Mark" value="35000" /> \n\<set label="David" value="42300" /> \n\                             NO!!!!!!!!!!!!!!!!!!!!!!<set label="Graham" value="35300" /> \n\<set label="John" value="31300" />\n\\n\</chart>';

?然后他可以把数据库中的数据取出,经过ajax请求后,将value值替换。

这种方式不可取,如果我需要将label是可变的,那怎么办,当然也有办法,不过很笨。

再着,我200张报表都这么写,我相信我会很恶心。? 也不利于维护。

?

5.在action,bo,dao,解析都是不应该的。 这样的话,我们就需要一个类特殊的类,去解析这些数据,去格式化这些数据。

?

6.方法:

?

struts的自定义result类型,就是我们所需要的了。

?

(1)定义一个GridReportResult类,然后我们这里将数据格式化。细节部分我就不多说了。

比如:

public class GridResult extends BaseResult// BaseResult基础返回结果抽象类{private static Logger log = Logger.getLogger(GridResult.class);protected void doExecute(String arg0, ActionInvocation invocation) throws Exception{// TODO Auto-generated method stubHttpServletRequest request = ServletActionContext.getRequest();HttpServletResponse response = ServletActionContext.getResponse();response.setCharacterEncoding("UTF-8");response.setContentType("application/json;charset=" + request.getCharacterEncoding());PrintWriter output = response.getWriter();StringBuffer sb = new StringBuffer();// 报表数据字符串try{BaseAction baseAction = (BaseAction) invocation.getAction();sb.append("<report>\n");sb.append("<xml>\n");代码过多就不贴了。大家应该能明白我的意思。
?

(2)在struts的配置文件中去定义

<action name="getGridXml" type="gridResult"></result></action>

(3)js中获取数据,ajax的方法,我就不多说了。获取result直接是一个格式化好数据,那我就可以直接给相应的函数了,不需要自己再次格式化了。

?

?

GridReport ---------------> data格式

就是---------------->gridResult

?

综上所述,我想说的就是报表所需的格式化的数据,我们都可以用一个自定义的result给他封装好,那么我们js中所获得的数据,就很简单了。

100张同一类型的报表,我都可以使用这一个gridResult 结果类型。

由此可见,struts自定义result的重要。

?

注:写的时候出了点意外,状态不好,写的不对不好的地方,我会修改。

?

?

热点排行