继续接上篇博客。
之所以认为formtable不可以,是因为controller里面可以一次性接收datawindow传过来的所有数据,在controller里面建个datastore,用para.getStore()接收,但是忽略了我可以把formtable里面的数据一条一条的传过去,直接para.getString()即可.接收过来再放到新建的datastore里面即可。
因为我会多次新增指标,所以已经选好的指标要在主页面的datawindow里面放着,新添的时候在下面添加就是了。(这是表面看着的样子。)实现起来,把新增指标的信息放在session里的一个datastore里面,然后把主页面已经选好的指标也放在一个datastore里面,在getSession的时候,把这两个datastore结合在一起取出来再放到主页面的datastore即可。
这里当时遇到的一个超麻烦问题是,主页面最前面tbbh这一列的问题。首先,其他列都是后台传值过来,tbbh之所以不能传是因为单指标/多指标这两个页面的tbbh是综合起来递增的。这个本来想通过主页面的javascript实现,本来公司标签是提供了方法的,但是没成功。我也不知道为啥。问了框架的研究者,没回我。。。讨厌这样的“老人”,看我们组这些“前辈们”,有问必答的。。。
然后我用jquery实现了。因为最前面有个列是默认递增的,我的tbbh列完全可以取它的值。但是因为需要tbbh列来排序,所以tbbh列存在还是很必要的。
//设置图表编号
function setTbbh(){
$.each($("tr"),function(k,v){
var firstValue=$(v).find($("input[id^='columnNo']")).val();
$(v).find($("input[id^='tbbh']")).val(firstValue);
});
}
后来组长给我说了个新方法,直接用主页面dataswindow传到session页面的datastore的行数加1来实现tbbh的排列。这里其实还有个问题,就是session里面的东西貌似都必须是String类型的,所以我不得不把主页面的tbbh这一列的datatype换成了String。改为其他都传不过值去。关于session的东西我还不懂,等有空了去研究一下。
传数据这有个很重要的环节,因为我的主页datawindow里面有个隐藏的列,是放一些要存数据库但是不必再首页展示的字段,这些字段不止一个,所以要拼字符串。
单指标vstr = zbbh + "," + tjlb + "," + lbmx + "," + zbbm + "," + cxns + ",";
多指标vstr = vstr + zbbh + "," + tjlb + "," + lbmx + "," + zbbm + "," + xsxh + "," + cxns + "&";
第一步到此为止。
下面第二步,向数据库中存数据。
首先,把此表中的数据delete。然后insert新的数据进去。这里比较重点的一个是分割上面的字符串。
知道java有自己提供的方法分割字符串真的是超开心的说,O(∩_∩)O哈哈~
首先判断是多指标还是单指标:vstr.indexOf("&")!=-1意思是字符串里是否有&符号。(唉,因为用的&而不是;被组长鄙视了一顿,说我语文没学好。。。)
多指标分割:String[] vstrArray = vstr.split("&");先把不同指标的断开,(因为即使是多指标,也要一个指标存一行,就是一个多指标图表在数据库中是存多行的,这点在后续工作中快把我坑死~\(≧▽≦)/~啦),接下来同一指标的不同字段分割:String[] strArray = vstrArray[j].split(",");split方法是把分割的东西放在字符串的数组里面的,看准了,是字符串!
存数据这当时遇到的问题就是字段值没有弄好,一共13个字段,老是弄错。倒没有其他问题。
第三步,把这些数据从首页展示出来。(最麻烦的说)
点击保存按钮的时候,先执行一共点击方法,点击方法的最后一行在连接到refresh方法,从refresh方法调用controller里面的queryusercharts()方法,然后调用bpo页面的这个方法,其实就是从数据库里select数据。然后select完之后调用bpo里面的querycharts()方法,把需要的数据存入datastore然后传到形成fusioncharts的方法里面,最后拼出一个字符串,然后再返回首页形成图表。这一块的逻辑很简单,实现起来有点麻烦,因为这个需要的数据是不清楚到底需要哪些,并且单指标与多指标需要的不同,形成fusioncharts的方法也不同。幸亏上阵子研究fusioncharts有经验,知道是怎么传值的。
这时候,传到首页去了。然后我需要再点击首页配置页面的时候,这个页面的datawindow里面是形成图表的那些指标。并且跟当时向数据库保存的时候一样。再点击保存的时候,放在数据库里的能跟刚才的一样。
这里用到了bpo里面的modify()方法,这个破方法,让我加班了一天!!没搞出来竟然。
这里拼接字符串是个大问题。虽说是首页的图表传到主页面,其实还是从数据库select数据,把取到的数据再拼接成字符串放在datawindow里是本质。
一个问题,在那边是多指标是多行,存过来却要一行,纠结了许久,后来组长说你先取出数据来放在一个datastore里,把这些数据整合一下,放在新建的另一个datastore即可。确实是个很好的方法,但是实现起来真心难啊。因为必须得判断到底是那几行并成一行,必须从字段中找解决方法,最后找到了xsxh。如果select数据的时候能够按在数据库排列的顺去select的话很简单,但是我不明白的是为啥有时候是倒序查有时候是正序查。所以搞到一个多指标图表的最大序列号是个大问题。最后我用的是同一个tbbh并且xsxh是最大的时候就用它。并且这几行都是同一个图表的,下次循环的时候是要跳过这几行的。
另外一个问题,往新的datastore存的时候,要保证存在不同的行,不然后面的会覆盖前面的。这里是用了最久时间的。。。
到此,大的框架完工。