【发明内容】
基于此,有必要提供一种可避免页面中多个复合组件互相干扰的基于复合组件的请求处理方法。
此外,还有必要提供一个可避免页面中多个复合组件互相干扰的基于复合组件的请求处理系统。
一种基于复合组件的请求处理方法,包括以下步骤:
接收页面请求;
遍历页面中的组件,并判断所述页面中的组件是否为复合组件,若是,则
遍历所述复合组件中的子组件;
将子组件的属性值与复合组件的属性值相关联得到命名空间值;
获取与子组件所处生命周期阶段对应的调用方法;
根据所述页面请求以及命名空间值执行调用方法。
优选地,当所述页面中的组件为复合组件时,所述方法还包括:
获取所述复合组件的属性值,并设置于请求作用域中;
将子组件的属性值与复合组件的属性值相关联得到命名空间值的步骤为:
获取所述子组件的属性值,将所述子组件的属性值设置于请求作用域中,与复合组件的属性值相关联得到命名空间值。
优选地,还包括:
根据所述子组件的命名空间值返回调用方法的执行结果。
优选地,还包括:
当复合组件中的子组件遍历完毕时,删除所述请求作用域中复合组件的属性值。
优选地,还包括:
当页面中的组件遍历完毕后判断生命周期的阶段是否运行完毕,若是,则返回执行结果,若否,则返回遍历页面中的组件的步骤。
一种基于复合组件的请求处理系统,至少包括:
接收模块,用于接收页面请求;
遍历模块,用于遍历页面中的组件;
判断模块,用于判断页面中的组件是否为复合组件,若是,则通知所述遍历模块;
所述遍历模块还用于遍历所述复合组件中的子组件;
处理模块,用于将子组件的属性值与复合组件的属性值相关联得到命名空间值,并获取与子组件所处生命周期阶段对应的调用方法;
执行模块,用于根据所述页面请求以及命名空间值执行调用方法。
优选地,所述处理模块包括:
获取单元,用于获取复合组件的属性值、子组件的属性值以及与子组件生命周期阶段对应的调用方法;
属性值设置单元,用于将复合组件的属性值以及子组件的属性值设置于请求使用域中,并将所述复合组件的属性值以及子组件的属性值相关联得到命名空间值。
优选地,所述执行模块还用于根据所述子组件的命名空间值返回调用方法的执行结果。
优选地,当复合组件中的子组件遍历完毕时,所述属性值设置单元还用于删除所述请求使用域中复合组件的属性值。
优选地,当页面中的组件遍历完毕后,所述判断模块判断生命周期的阶段是否运行完毕,若是,则返回执行结果,若否,则继续遍历页面中的组件。
上述基于复合组件的请求处理方法及系统,将复合组件的属性值与子组件的属性值相关联得到命名空间值,并根据命名空间值进行了调用方法的执行,极大地避免了同一页面中多个复合组件互相干扰的状况发生,在命名空间值的作用下,执行了调用方法后仅对与该命名空间值对应的复合组件进行响应,在提高代码复用率、降低开发成本的同时保证了复合组件之间的抗干扰性,也有效地降低了浏览器的资源消耗。
【具体实施方式】
图1示出了一个实施例中基于复合组件的请求处理的方法流程图,包括以下步骤:
在步骤S101中,接收页面请求。本实施例中,用户在浏览器中所显示的页面上激活任一组件,发起页面请求。例如,在一个页面中有多张照片,每张照片下方都设置了一个打分复合组件,浏览照片的用户为使用打分复合组件对每张照片打分,通过鼠标点击页面上的打分复合组件,触发了页面请求向后台发送。
在步骤S102中,遍历页面中的组件。本实施例中,整个页面是由一系列组件构成的组件树,从组件树的根结点开始遍历,逐一访问组件树中的每一个组件。
在步骤S103中,判断页面中的组件是否为复合组件,若是,则进入步骤S104中,若否,则进入步骤S105。本实施例中,如果访问的组件不是复合组件,则根据页面请求、当前所处的生命周期阶段进行查找得到访问的组件所需的调用方法,并执行该调用方法。
在JSF(Java Server Faces)开发的过程中,常常会遇到一个原生组件无法满足所有需求的情况,需要使用多个原生组件来满足所有需求。但是如果这些需求是很常见的,将会导致在多次重复地写入一样的代码。为减少代码量,将多个原生组件封装成一个组件,这一封装了多个原生组件的组件称为复合组件。
根据JSF标准规范,每一个组件都应当经过六个阶段而完成生命周期。生命周期的六个阶段包括:恢复视图、应用请求、执行验证、更新模型值、调用应用程序以及渲染响应。在接收到用户发起的页面请求后,页面中的组件树进入生命周期的恢复视图阶段,待页面中的组件树遍历完毕后将进入生命周期的下一阶段,直到生命周期的全过程结束。
在步骤S104中,遍历复合组件中的子组件。
在步骤S106中,将子组件的属性值与复合组件的属性值相关联得到命名空间值。本实施例中,命名空间值是由属性值构成的,属性值是每一组件的唯一标识,例如,该属性值可以是组件的ID。例如,若复合组件的的属性值为parent,子组件的属性值为children,则将子组件的属性值与复合组件的属性值相关联得到的命名空间值为parent_children。
如图2所示,将子组件的属性值与复合组件属性值相关联得到命名空间值的步骤为:
步骤S116,获取子组件的属性值。
步骤S136,将子组件的属性值设置于请求作用域中,与请求作用域中复合组件的属性值相关联得到命名空间值。本实施例中,请求作用域仅仅在请求开始到结束这一段时间内有效。当复合组件中的子组件遍历完毕时,删除请求作用域中复合组件的属性值。
在步骤S107中,获取与子组件所处生命周期阶段对应的调用方法。本实施例中,根据页面请求、当前所处的生命周期阶段进行查找得到访问的组件所需的调用方法。子组件所处的生命周期阶段不同,组件执行的调用方法也各不相同。例如,在套用申请值阶段,组件将调用processDecodes方法,若处理执行验证阶段,则调用processValidators方法。根据组件所处的生命周期阶段得到对应的调用方法名称,再根据页面请求、调用方法名称以及命名空间值执行调用方法,从而保证了调用方法作用于与命名空间值对应的子组件上。
在步骤S108中,根据页面请求以及命名空间值执行调用方法。
在步骤S105中,根据页面请求、组件所处的生命周期阶段对应的调用方法名称执行调用方法。
在一个具体的实施例中,当页面中的组件为复合组件时,基于复合组件的请求处理方法还包括获取复合组件的属性值,并设置于请求作用域中的步骤。
另一实施例中,上述基于复合组件的请求处理方法还包括了根据子组件的命名空间值返回调用方法的执行结果。本实施例中,在执行了调用方法后,根据命名空间值向对应的子组件返回执行结果。
在优选的实施例中,如图3所示,上述基于复合组件的请求处理方法包括以下步骤:
步骤S301,接收页面请求。
步骤S302,遍历页面中的组件。
步骤S303,判断页面中的组件是否为复合组件,若是,则进入步骤S304中,若否,则进入步骤S312。
步骤S304,获取复合组件的属性值,并设置于请求作用域中。
步骤S305,遍历复合组件中的子组件,并获取子组件的属性值。
步骤S306,将子组件的属性值设置于请求作用域中,与复合组件的属性值相关联得到命名空间值。
步骤S307,获取与子组件所处生命周期阶段对应的调用方法。
步骤S308,根据页面请求及命名空间值执行调用方法。
步骤S309,根据子组件的命名空间值返回调用方法的执行结果。
步骤S310,当复合组件中的子组件遍历完毕时,删除请求作用域中复合组件的属性值。本实施例中,在复合组件中的子组件已经遍历完毕时,删除该复合组件设置在请求作用域中的属性值。
步骤S311,当页面中的组件遍历完毕后判断生命周期的阶段是否运行完毕,若是,则进入步骤S313,若否,则返回步骤S302。本实施例中,当页面中的组件树上的组件均被遍历完毕之后,当前生命周期的阶段已经结束,若此时还有生命周期中的下一阶段需要运行,则进入下一阶段,返回步骤S302;若当前生命周期的阶段是生命周期中的最后一个阶段,则说明页面中的组件树的生命周期结束。
步骤S312,根据页面请求、组件所处的生命周期阶段对应的调用方法名称执行调用方法,并响应。
步骤S313,返回调用方法的执行结果。
图4示出了一个实施例中基于复合组件的请求处理系统的结构,该系统至少包括接收模块10、遍历模块20、判断模块30、处理模块40以及执行模块50。
接收模块10,用于接收页面请求。本实施例中,用户在浏览器中所显示的页面上激活任一组件,发起页面请求。例如,在一个页面中有多张照片,每张照片下方都设置了一个打分复合组件,浏览照片的用户为使用打分复合组件对每张照片打分,通过鼠标点击页面上的打分复合组件,触发了页面请求向后台发送,接收模块10接收用户所发起的页面请求,以便于对用户进行响应。
遍历模块20,用于遍历页面中的组件。本实施例中,整个页面是由一系列组件构成的组件树,遍历模块20从组件树的根结点开始遍历,逐一访问组件树中的每一个组件。
判断模块30,用于判断页面中的组件是否为复合组件,若是,则通知遍历模块20遍历复合组件中的子组件,若否,则通知执行模块50根据页面请求、组件所处的生命周期阶段对应的调用方法名称执行调用方法。本实施例中,如果访问的组件不是复合组件,则根据页面请求、当前所处的生命周期阶段进行查找得到访问的组件所需要的调用方法,并执行该方法。
在JSF(Java Server Faces)开发的过程中,常常会遇到一个原生组件无法满足所有需求的情况,需要使用多个原生组件来满足所有需求。但是如果这些需求是很常见的,将会导致在多次重复地写入一样的代码。为减少代码量,将多个原生组件封装成一个组件,这一封装了多个原生组件的组件称为复合组件。
根据JSF标准规范,每一个组件都应当经过六个阶段而完成生命周期。生命周期的六个阶段包括:恢复视图、应用请求、执行验证、更新模型值、调用应用程序以及渲染响应。在接收到用户发起的页面请求后,页面中的组件树进入生命周期的恢复视图阶段,待页面中的组件树遍历完毕后将进入生命周期的下一阶段。
在其它实施例中,当页面中的组件遍历完毕后,判断模块30判断生命周期的阶段是否运行完毕,若是,则返回执行结果,若否,则继续遍历页面中的组件。
处理模块40,用于子组件的属性值与复合组件的属性值相关联得到命名空间值,并获取与子组件所处生命周期阶段对应的调用方法。本实施例中,属性值是每一组件的唯一标识,该属性值可以是组件的ID。命名空间值是由属性值构成的,例如,若复合组件的的属性值为parent,子组件的属性值为children,则处理模块30将子组件的属性值与复合组件的属性值相关联得到的命名空间值为parent_children。
执行模块50,用于根据页面请求以及命名空间值执行调用方法。本实施例中,所处的生命周期阶段的不同,执行模块50执行的调用方法也各不相同。若处理执行验证阶段,则执行模块50调用processValidators方法。执行模块50根据组件所处的生命周期阶段得到对应的调用方法名称,再根据页面请求、调用方法名称以及命名空间值执行调用方法,从而保证了调用方法作用于与命名空间值对应的子组件上。
在一个具体的实施例中,如图5所示,处理模块40包括获取单元401以及属性值设置单元403。
获取单元401,用于获取复合组件的属性值、子组件的属性值以及与子组件生命周期阶段对应的调用方法。
属性设置单元403,用于将复合组件的属性值以及子组件的属性值相关联得到命名空间值,并将复合组件的属性值以及子组件的属性值相关联得到命名空间值。本实施例中,请求作用域仅仅在请求开始到结束这一段时间内有效。
另一实施例中,当复合组件中的子组件遍历完毕时,属性设置单元403删除请求作用域中复合组件的属性值。本实施例中,在复合组件中的子组件已经遍历完毕时,属性设置单元403删除请求作用域中该复合组件设置在请求作用域中的属性值。
上述基于复合组件的请求处理方法及系统将复合组件的属性值与子组件的属性值相关联得到命名空间值,并根据命名空间值进行了调用方法的执行,极大地避免了同一页面中多个复合组件互相干扰的状况发生,在命名空间值的作用下,执行了调用方法后仅对与该命名空间值对应的复合组件进行响应,在提高代码复用率、降低开发成本的同时保证了复合组件之间的抗干扰性,也有效地降低了浏览器的资源消耗。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。