一种维护控件状态信息的方法及装置的制作方法

文档序号:6603902阅读:106来源:国知局
专利名称:一种维护控件状态信息的方法及装置的制作方法
技术领域
本发明涉及一种维护控件状态信息的方法及装置。
背景技术
目前,如何维护用户操作页面的控件状态信息,是本领域技术人员一直不断探索 的。Do jo是一个用javascript ( —种客户端脚本语言嵌套在页面中)语言实现的开 源DHTML工具包,Do jo可以使web页面具有动态能力,或在任何稳健的支持javascript语 言的环境中发挥作用,利用Do jo提供的组件,可以提升web应用程序可用性、交互能力以及 功能上的提高,Dojo试图建立一种新的标签语言DojoML( —种可以接受html输入的解析 器)。其目标是,在DojoML和javascript脚本语言不变的情况下,用不同的render方式展 示数据。Dojo提供了使用的工具,但是在开发环境的变化,要求也不同,这增加了开发的难 度,通用性不佳。因此,虽然Dojo具有很多优势,但是由于开发环境的限制,也不适用于进行控件 信息维护。

发明内容
本发明要解决的技术问题是,提供一种维护控件状态信息方法及装置,针对目前 开发系统中普遍需要的功能,开发一种通用的方法及装置,以使得开发者更好的使用Dojo 所带来的界面效果,和项目的业务逻辑。为了解决上述技术问题,本发明提出一种维护控件状态信息的方法,包括采集用户操作页面的控件状态信息,并将其发送至应用服务器;在所述应用服务器端对所述控件状态信息进行处理;根据处理完的控件状态信息在所述用户操作页面重新加载控件状态信息。进一步地,上述方法还可具有以下特点在采集用户操作页面的控件状态信息后,先将其转换为json格式的数据,然后再 将其发送至所述应用服务器端;在所述应用服务器端接收到json格式的控件状态信息后,将其转换为所述应用 服务器能够识别的格式的数据,然后对所述控件状态信息进行处理,以及将处理完的控件 状态信息转换为json格式的数据。进一步地,上述方法还可具有以下特点在采集用户操作页面的控件状态信息时,利用Dojo的注册机制判断所述用户操 作页面是否存在注册的控件,遍历注册的控件,提取所述注册的控件的状态信息。进一步地,上述方法还可具有以下特点根据处理完的控件状态信息在所述用户操作页面重新加载控件状态信息包括
依次判断所述处理完的控件状态信息是否是Dojo控件的,对于Dojo控件的控件 状态信息,循环遍历所述用户操作页面上对应的Do jo控件,重新加载所述处理完的控件状 态信息,然后重新渲染Dojo控件。为了解决上述技术问题,本发明还提出一种维护控件状态信息的装置,包括采集 模块、处理模块和加载模块所述采集模块,采集用户操作页面的控件状态信息,并将其发送至应用服务器;所述处理模块,在应用服务器端对所述控件状态信息进行处理;所述加载模块,根据所述处理模块处理完的控件状态信息,在所述用户操作页面 重新加载控件状态信息。进一步地,上述装置还可具有以下特点所述采集模块,在采集用户操作页面的控件状态信息后,先将其转换为json格式 的数据,然后再将其发送至所述应用服务器;所述处理模块,在所述应用服务器端接收到json格式的控件状态信息后,将其转 换为所述应用服务器能够识别的格式的数据,然后对所述控件状态信息进行处理;以及将 处理完的控件状态信息转换为json格式的数据。进一步地,上述装置还可具有以下特点所述采集模块,在采集用户操作页面的控件状态信息时,利用Dojo的注册机制判 断所述用户操作页面是否存在注册的控件,遍历注册的控件,提取所述注册的控件的状态 fn息o进一步地,上述装置还可具有以下特点所述加载模块,根据所述处理模块处理完的控件状态信息,在所述用户操作页面 重新加载控件状态信息包括依次判断所述处理完的控件状态信息是否是Dojo控件的,对于Dojo控件的控件 状态信息,则循环遍历所述用户操作页面上对应的Dojo控件,重新加载所述处理完的控件 状态信息,然后重新渲染Dojo控件。为了解决上述技术问题,本发明还提出另一种维护控件状态信息的装置,包括采 集模块和加载模块所述采集模块,采集用户操作页面的控件状态信息,并将其发送出去;所述加载模块,用以接收控件状态信息,并根据接收到的控件状态信息在所述用 户操作页面重新加载控件状态信息。进一步地,上述装置还可具有以下特点所述采集模块,在采集用户操作页面的控件状态信息时,利用Dojo的注册机制判 断所述用户操作页面是否存在注册的控件,遍历注册的控件,提取所述注册的控件的状态 fn息;所述加载模块,在接收到控件状态信息后,依次判断所述处理完的控件状态信息 是否是Do jo控件的,对于Do jo控件的控件状态信息,则循环遍历所述用户操作页面上对应 的Dojo控件,重新加载所述处理完的控件状态信息,然后重新渲染Dojo控件。本发明提供的一种维护控件状态信息方法及装置,可以有效地针对目前开发系统 中普遍需要的功能,提供一种通用的方法及装置,以使得开发者更好的使用Dojo所带来的界面效果,和项目的业务逻辑。


图1是本发明实施例一种维护控件状态信息方法流程图;图2是本发明实施例一种维护控件状态信息装置示意图;图3是本发明实施例另一种维护控件状态信息装置示意图。
具体实施例方式本发明提供了一种维护控件状态信息方法及装置,其基本构思是采集用户操作 页面的状态信息,并将其发送至应用服务器;在应用服务器端对所述控件状态信息进行处 理;以及根据所述处理完的控件状态信息在所述用户操作页面重新加载控件状态信息。从 而巧妙地为程序员提供了一种更快的开发界面技术,使程序员无需关心界面Dojo技术的 具体使用,很方便的快速开发程序,让程序员把重点放在业务处理方面,且具有良好的可重 复使用的功能。下面将结合附图来详细说明本发明实施方式。参见图1,该图示出了本发明实施例一种维护控件状态信息方法,包括步骤步骤S101 采集用户操作页面的控件状态信息,并将其发送至应用服务器端;所述应用服务器包括HTTP通信服务器和应用程序服务器;在采集用户操作页面的控件状态信息时,出于性能和使用的考虑,可以重新写了 一个Dojo语言的类,该类集成了提取控件的方法。类名可以命名为srjs.PageState(其中,srjs是自定义包,PageState是自定义 JavaScript文件,合起来使用是外部引用的用法),其作用就是保存和恢复用户操作页面 上dijit控件状态。为了更好地考虑用户的使用,可以完全遵循Dojo的规范。具体使用可以是首先请求d0j0.require(〃 srjs. PageState“),相当于导入 某个文件的用法,其作用是引入一个命名为srjs. PageState的一个类。此类定义了几个 方法分别可以是perSubmit(请求提交前收集画面dijit控件的状态)、preParse (调用 前将控件状态恢复)、postParse (调用后将控件状态恢复)、getTabContainerState (得 至lj TabContainer ^! ^ ^ ) > setTabContainerState ( ^ B TabContainer ^! ^ 态)、getComboBoxState (得到 ComBox 状态)、getGideState (得到 Grid 控件状态)、 SetGridState (设置Grid控件状态),以及getStateFormStore (获取所有控件的数据源) 方法,该些方法的作用是提取控件的状态信息,这是一个通用的方法,其在任何页面都可以 使用。说明一下该方法的具体实现步骤A 在这个类中声明了全局变量preParseExecuted :false,标志是否在Dojo控件解析前执行过恢复状态操作还有attrs:[“ id",〃 value",〃 baseClass",〃 disabled",〃 readonly", “displayedValue"]这个数组,其表示通常情况下需要记录的状态属性;B 在perSubmit方法中定义了一个局部数组di jitCtrls,此数组的功能是存放对 应控件的状态值;C:遍历已注册的dijit (拥有相同父类的控件)控件,提取每个控件的状态信息,该方法命名可以是dijit. registry. forEach(—个循环的方法名);较佳地,本发明实施例中,可以巧妙地利用Dojo的注册机制来判断是否有注册的 di jit控件;遍历的时候考虑到性能的因素,用通用遍历方法来实现。并不是把所有的控件来 遍历,而是用到了各控件之间的继承关系,来现实快速高效的遍历。比如像dijit. form. TextBox (文本框),di jit. form. Textarea (文本域),di jit. form. Horizontal Slider (滑 块)这些控件遍历的时候,对dijit. form. FilteringSelect (带过滤功能),dijit. form. ComboBod下拉框)也都要循环执行一次,如果是分开遍历的时候,则在页面中就要执行2 次,而用了本发明该方法就只需执行一次。因为这几个控件都是从TextBox (文本框)派生 出来的。因此,采用本发明方法,只需要一个判断就可以将众多的控件都找到了,非常的简 单高效。D 下一个判断是处理TonggleButton (带单选框的按钮),RadioButton (单选框) 主要是取这两个控件的选中状态;E 下一个判断是处理TabContainer (标签页控件),此控件是一个标签页控 件,因为其可以让一个标签页所选中,同时其也可以是一个容器控件。此控件是由多个 childwigit (子控件名称)所组成,而对应的chlidwigit的控件也有对应的id标识符。所 以得到它的id就可以判断出TabContainer所选中的是哪一个子标签页。F 下一个判断是grid控件,此控件提取比较麻烦,其是由model载入的,而model 来调用Structure的样子,但是Structure又包含了多个view来实现的。采用Dojo的dojo. data. ItemFileReadStore属性来判断grid的数据源。其方法 可以如下if(grid, store &&(grid, store instanceof dojo. data. ItemFileReadStore | grid, storeinstanceof dojo. data. ItemFileffriteStore)){gridState = this. getStateFromStore(grid, store);gridState. sortlnfo = grid, sortlnfo ;if (grid, selection. getSelected ()) {gridState. selected = grid, selection, selected ;}G 最后进行过滤处理,仅记录有id属性的控件状态,没有id无法恢复。最后把 这些收集到的状态信息都放到数组dijitCtrls (数组名称)里,然后将结果转为json的格 式d0j0. toJson(dijitCtrls)(把数组装换成json格式的方法)。当用户操作页面调用这个方法后就可以把控件的这些所有状态信息提交到应用 服务器端了。步骤S102 在应用服务器端对所述控件状态信息进行处理;提交应用服务器端的方式比较多,目前在应用服务器端采用的语言是java。将所 述控件状态信息提交到应用服务器端后,Java通过request请求方法得到前台页面提交过 来的控件状态信息的数据。得到以后,用一个通用的方法,例如stringToMap方法,将得到 的控件状态信息整理成对应的java语言所能识别出来的信息放到map的集合中。此方法
7就是把json的格式对应的整合出来,以便为了修改某一个控件的状态,整合成对应的控件 id标识符和他对应的属性的格式。放到map的集合中。具体的实现方法可以是JSONObject jsonObj = new JSONObject(json);Iterator keylter = jsonObj. keys ();String key ;Object value ;valueMap = new HashMap ();while (keylter. hasNext ()) {key = (String) keylter. next ();value = jsonObj. get (key);if(value instanceof JSONArray){JSONArray jsonArray = (JSONArray)value ;HashMap subValueMap = new HashMap();String subKey = 〃 〃 ;Object subValue ;for (int i = 0 ;i < j sonArray. length() ;i++) {subValue = jsonArray. getJSONObject (i);if(subValue instanceof JSONObject){JSONObject sub2Json0bj = new JSONObject(subValue. toStringO);HashMap sub2ValueMap = new HashMap ();Iterator sub2KeyIter = sub2Json0bj. keys ();String sub2Key ;Object sub2Value ;while (sub2KeyIter. hasNext ()) {sub2Key = (String) sub2KeyIter. next ();sub2Value = sub2Json0bj. get(sub2Key);if (" id" . equals (sub2Key)) {subKey = sub2Value. toStringO ;}sub2ValueMap. put(sub2Key, sub2Value);}subValue = sub2ValueMap ;}subValueMap. put(subKey, subValue);}value = subValueMap ;}valueMap. put (key, value);
得到这个集合后,则可以对前台的页面的控件的状态信息进行处理,例如,修改, 或不操作的行为。在处理完控件状态信息后,还将map对应的数据转成j son的格式,这里也提供了 一个通用的方法实例JSONArray jsonArr = new JSONArray();
HashMap items = (HashMap)hashMap. get(" items"); Set set = items. entrySet (); Iterator iterator = set. iterator (); while (iterator. hasNext()){
Map. Entry mapentry = (Map. Entry)iterator, next(); HashMap subMap = (HashMap)mapentry. getValue(); jsonArr. put(subMap);
}jsonStr = jsonArr. toString();jsonStr =" {identifier ' id' , items “ +jsonStr+" }〃 ;然后把结果传回给用户操作页面。由用户操作页面来处理这些结果。步骤S103 根据处理完的控件状态信息,在所述用户操作页面重新加载控件状态
fn息o用户操作页面在接收到应用服务器端传回来的控件状态信息时,在do jo. parser, parse ()调用前将控件状态恢复,等控件放到后恢复,以便提升性能。具体实现步骤调用srjs.PageState类中的preParse方法。此方法首先判断是否是do jo的控 件然后去循环遍历此控件。根据type类型来匹配这些传回来的值是那些控件,然后主要恢 复共通状态 do jo. attr(domNode, p, djt[p]);Bsrjs. PageStateW postParse ^^ ^ do jo. parser, parse () i周用 后将控件状态恢复,其主要针对Grid,ComboBox, TabContainer, FilteringSelect类型控 件;这里的每个控件的恢复方法基本上就是得到的一个逆反过程。其原理就是根据对 应的id标识符,主要是把对应的数据源恢复。C 上述执行成功后,页面在加载完html组件后,就会从新渲染dojo的这些控件, 就会把这些修改的或没有修改的控件重新呈现到页面上。为了实现上述方法,本发明实施例还提供了 一种维护控件状态信息的装置,如图2 所示,包括采集模块、处理模块和加载模块所述采集模块,采集用户操作页面的控件状态信息,并将其发送至应用服务器。所述处理模块,在应用服务器端对所述控件状态信息进行处理。所述加载模块,根据所述处理模块处理完的控件状态信息,在所述用户操作页面 重新加载控件状态信息。所述采集模块、所述处理模块和所述加载模块的位置可以根据需要设置。例如,在一实施例中,所述采集模块和加载模块可以位于客户端上,所述处理模块可以位于应用服务器上,所述采集模块采集到用户操作页面的控件状态信息后,将其发送 至应用服务器上的所述处理模块,由所述处理模块对所述控件状态信息进行处理,然后将 处理后的控件状态信息发送至客户端的所述加载模块,由所述加载模块根据所述处理后的 控件状态信息重新加载控件状态信息。再例如,在另一实施例中,所述采集模块、所述处理模块和所述加载模块也可以是 独立于客户端和服务器的。进一步地,所述采集模块,在采集用户操作页面的控件状态信息后,先将其转换为 j son格式的数据,然后再将其发送至所述应用服务器。所述处理模块,在所述应用服务器端 接收到json格式的控件状态信息后,将其转换为所述应用服务器能够识别的格式的数据, 然后对所述控件状态信息进行处理;以及将处理完的控件状态信息转换为json格式的数 据。进一步地,所述采集模块,在采集用户操作页面的控件状态信息时,利用Dojo的 注册机制判断所述用户操作页面是否存在注册的控件,遍历注册的控件,提取所述注册的 控件的状态信息。进一步地,所述采集模块,在遍历所述注册的控件时,是利用控件之间的继承关系 实现遍历的。进一步地,所述加载模块,根据所述处理模块处理完的控件状态信息,在所述用户 操作页面重新加载控件状态信息包括依次判断所述处理完的控件状态信息是否是Dojo 控件的,对于Dojo控件的控件状态信息,则循环遍历所述用户操作页面上对应的Dojo控 件,重新加载所述处理完的控件状态信息,然后重新渲染Do jo控件。为了实现上述方法,本发明实施例还提供了另一种维护控件状态信息的装置,如 图3所示,包括采集模块和加载模块所述采集模块,采集用户操作页面的控件状态信息,并将其发送出去;所述加载模块,用以接收控件状态信息,并根据接收到的控件状态信息在所述用 户操作页面重新加载控件状态信息。进一步地,所述采集模块,在采集用户操作页面的控件状态信息时,利用Dojo的 注册机制判断所述用户操作页面是否存在注册的控件,遍历注册的控件,提取所述注册的 控件的状态信息。所述加载模块,在接收到控件状态信息后,依次判断所述处理完的控件状 态信息是否是Do jo控件的,对于Do jo控件的控件状态信息,则循环遍历所述用户操作页面 上对应的Dojo控件,重新加载所述处理完的控件状态信息,然后重新渲染Dojo控件。当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,本 领域技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应 属于本发明所附的权利要求的保护范围。
权利要求
一种维护控件状态信息的方法,包括采集用户操作页面的控件状态信息,并将其发送至应用服务器;在所述应用服务器端对所述控件状态信息进行处理;根据处理完的控件状态信息在所述用户操作页面重新加载控件状态信息。
2.如权利要求1所述的方法,其特征在于在采集用户操作页面的控件状态信息后,先将其转换为json格式的数据,然后再将其 发送至所述应用服务器端;在所述应用服务器端接收到json格式的控件状态信息后,将其转换为所述应用服务 器能够识别的格式的数据,然后对所述控件状态信息进行处理,以及将处理完的控件状态 信息转换为json格式的数据。
3.如权利要求1或2所述的方法,其特征在于在采集用户操作页面的控件状态信息时,利用Dojo的注册机制判断所述用户操作页 面是否存在注册的控件,遍历注册的控件,提取所述注册的控件的状态信息。
4.如权利要求1所述的方法,其特征在于根据处理完的控件状态信息在所述用户操作页面重新加载控件状态信息包括 依次判断所述处理完的控件状态信息是否是Dojo控件的,对于Dojo控件的控件状态 信息,循环遍历所述用户操作页面上对应的Dojo控件,重新加载所述处理完的控件状态信 息,然后重新渲染Do jo控件。
5.一种维护控件状态信息的装置,包括采集模块、处理模块和加载模块 所述采集模块,采集用户操作页面的控件状态信息,并将其发送至应用服务器; 所述处理模块,在应用服务器端对所述控件状态信息进行处理;所述加载模块,根据所述处理模块处理完的控件状态信息,在所述用户操作页面重新 加载控件状态信息。
6.如权利要求5所述的装置,其特征在于所述采集模块,在采集用户操作页面的控件状态信息后,先将其转换为json格式的数 据,然后再将其发送至所述应用服务器;所述处理模块,在所述应用服务器端接收到json格式的控件状态信息后,将其转换为 所述应用服务器能够识别的格式的数据,然后对所述控件状态信息进行处理;以及将处理 完的控件状态信息转换为json格式的数据。
7.如权利要求5或6所述的装置,其特征在于所述采集模块,在采集用户操作页面的控件状态信息时,利用Dojo的注册机制判断所 述用户操作页面是否存在注册的控件,遍历注册的控件,提取所述注册的控件的状态信息。
8.如权利要求5所述的装置,其特征在于所述加载模块,根据所述处理模块处理完的控件状态信息,在所述用户操作页面重新 加载控件状态信息包括依次判断所述处理完的控件状态信息是否是Dojo控件的,对于Dojo控件的控件状态 信息,则循环遍历所述用户操作页面上对应的Dojo控件,重新加载所述处理完的控件状态 信息,然后重新渲染Do jo控件。
9.一种维护控件状态信息的装置,包括采集模块和加载模块所述采集模块,采集用户操作页面的控件状态信息,并将其发送出去; 所述加载模块,用以接收控件状态信息,并根据接收到的控件状态信息在所述用户操 作页面重新加载控件状态信息。
10.如权利要求9所述的装置,其特征在于所述采集模块,在采集用户操作页面的控件状态信息时,利用Dojo的注册机制判断 所述用户操作页面是否存在注册的控件,遍历注册的控件,提取所述注册的控件的状态信 息;所述加载模块,在接收到控件状态信息后,依次判断所述处理完的控件状态信息是否 是Dojo控件的,对于Dojo控件的控件状态信息,则循环遍历所述用户操作页面上对应的 Dojo控件,重新加载所述处理完的控件状态信息,然后重新渲染Dojo控件。
全文摘要
本发明提供了一种维护控件状态信息的方法及装置,该方法包括采集用户操作页面的控件状态信息,并将其发送至应用服务器;在所述应用服务器端对所述控件状态信息进行处理;根据处理完的控件状态信息在所述用户操作页面重新加载控件状态信息。采用该方法可以有效地针对目前开发系统中普遍需要的功能,提供一种通用的方法及装置,以使得开发者更好的使用Dojo所带来的界面效果,和项目的业务逻辑。
文档编号G06F9/445GK101894018SQ20101019542
公开日2010年11月24日 申请日期2010年5月31日 优先权日2010年5月31日
发明者段国栋 申请人:浪潮(北京)电子信息产业有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1