專利名稱:基于復合組件的請求處理方法及系統的制作方法
基于復合組件的請求處理方法及系統
技術領域:
本發(fā)明涉及計算機應用技術,特別是涉及一種基于復合組件的請求處理方法及系統。
背景技術:
在使用JSF(Java Server Faces)開發(fā)的Web應用中,常常通過使用復合組件來提高代碼的可重用性。然而,在實際的使用過程中,一個復合組件在同一個頁面里經常需要使用多次。例如,在一個頁面中有多張照片,每張照片下方都設置了一個打分復合組件,瀏覽照片的用戶使用打分復合組件對每張照片打分。當用戶激活任一打分復合組件進行打分時,后臺通過調用相應的方法,如托管Bean(managed-bean)來改變頁面中打分復合組件的顯示樣式,使打分復合組件由原來的O顆星變?yōu)?顆星。 但是,由于頁面中的所有打分復合組件都綁定到了同一個托管bean,使得托管bean在對激活的打分復合組件產生響應改變其顯示樣式時,產生了多個打分復合組件使用同一個托管bean時互相干擾的情況,頁面上所有的打分復合組件都顯示為3顆星,所有的打分組件都會變成一樣的,全部是顯示為3顆星。
發(fā)明內容基于此,有必要提供一種可避免頁面中多個復合組件互相干擾的基于復合組件的請求處理方法。此外,還有必要提供一個可避免頁面中多個復合組件互相干擾的基于復合組件的請求處理系統。一種基于復合組件的請求處理方法,包括以下步驟接收頁面請求;遍歷頁面中的組件,并判斷所述頁面中的組件是否為復合組件,若是,則遍歷所述復合組件中的子組件;將子組件的屬性值與復合組件的屬性值相關聯得到命名空間值;獲取與子組件所處生命周期階段對應的調用方法;根據所述頁面請求以及命名空間值執(zhí)行調用方法。優(yōu)選地,當所述頁面中的組件為復合組件時,所述方法還包括獲取所述復合組件的屬性值,并設置于請求作用域中;將子組件的屬性值與復合組件的屬性值相關聯得到命名空間值的步驟為獲取所述子組件的屬性值,將所述子組件的屬性值設置于請求作用域中,與復合組件的屬性值相關聯得到命名空間值。優(yōu)選地,還包括根據所述子組件的命名空間值返回調用方法的執(zhí)行結果。優(yōu)選地,還包括
當復合組件中的子組件遍歷完畢時,刪除所述請求作用域中復合組件的屬性值。優(yōu)選地,還包括當頁面中的組件遍歷完畢后判斷生命周期的階段是否運行完畢,若是,則返回執(zhí)行結果,若否,則返回遍歷頁面中的組件的步驟。一種基于復合組件的請求處理系統,至少包括接收模塊,用于接收頁面請求;遍歷模塊,用于遍歷頁面中的組件;判斷模塊,用于判斷頁面中的組件是否為復合組件,若是,則通知所述遍歷模塊;
所述遍歷模塊還用于遍歷所述復合組件中的子組件;處理模塊,用于將子組件的屬性值與復合組件的屬性值相關聯得到命名空間值,并獲取與子組件所處生命周期階段對應的調用方法;執(zhí)行模塊,用于根據所述頁面請求以及命名空間值執(zhí)行調用方法。優(yōu)選地,所述處理模塊包括獲取單元,用于獲取復合組件的屬性值、子組件的屬性值以及與子組件生命周期階段對應的調用方法;屬性值設置單元,用于將復合組件的屬性值以及子組件的屬性值設置于請求使用域中,并將所述復合組件的屬性值以及子組件的屬性值相關聯得到命名空間值。優(yōu)選地,所述執(zhí)行模塊還用于根據所述子組件的命名空間值返回調用方法的執(zhí)行結果。優(yōu)選地,當復合組件中的子組件遍歷完畢時,所述屬性值設置單元還用于刪除所述請求使用域中復合組件的屬性值。優(yōu)選地,當頁面中的組件遍歷完畢后,所述判斷模塊判斷生命周期的階段是否運行完畢,若是,則返回執(zhí)行結果,若否,則繼續(xù)遍歷頁面中的組件。上述基于復合組件的請求處理方法及系統,將復合組件的屬性值與子組件的屬性值相關聯得到命名空間值,并根據命名空間值進行了調用方法的執(zhí)行,極大地避免了同一頁面中多個復合組件互相干擾的狀況發(fā)生,在命名空間值的作用下,執(zhí)行了調用方法后僅對與該命名空間值對應的復合組件進行響應,在提高代碼復用率、降低開發(fā)成本的同時保證了復合組件之間的抗干擾性,也有效地降低了瀏覽器的資源消耗。
圖I為一個實施例中基于復合組件的請求處理方法的流程圖;圖2為一個實施例中遍歷復合組件的子組件,并將子組件的屬性值與復合組件屬性值相關聯得到命名空間值的流程圖;圖3為另一個實施例中基于復合組件的請求處理方法的流程圖;圖4為一個實施例中基于復合組件的請求處理系統的結構示意圖;圖5為一個實施例中處理模塊的結構示意圖。
具體實施方式圖I示出了一個實施例中基于復合組件的請求處理的方法流程圖,包括以下步驟在步驟SlOl中,接收頁面請求。本實施例中,用戶在瀏覽器中所顯示的頁面上激活任一組件,發(fā)起頁面請求。例如,在一個頁面中有多張照片,每張照片下方都設置了一個打分復合組件,瀏覽照片的用戶為使用打分復合組件對每張照片打分,通過鼠標點擊頁面上的打分復合組件,觸發(fā)了頁面請求向后臺發(fā)送。在步驟S102中,遍歷頁面中的組件。本實施例中,整個頁面是由一系列組件構成的組件樹,從組件樹的根結點開始遍歷,逐一訪問組件樹中的每一個組件。在步驟S103中,判斷頁面中的組件是否為復合組件,若是,則進入步驟S104中,若否,則進入步驟S105。本實施例中,如果訪問的組件不是復合組件,則根據頁面請求、當前所處的生命周期階段進行查找得到訪問的組件所需的調用方法,并執(zhí)行該調用方法。在JSF(Java Server Faces)開發(fā)的過程中,常常會遇到一個原生組件無法滿足所 有需求的情況,需要使用多個原生組件來滿足所有需求。但是如果這些需求是很常見的,將會導致在多次重復地寫入一樣的代碼。為減少代碼量,將多個原生組件封裝成一個組件,這一封裝了多個原生組件的組件稱為復合組件。根據JSF標準規(guī)范,每一個組件都應當經過六個階段而完成生命周期。生命周期的六個階段包括恢復視圖、應用請求、執(zhí)行驗證、更新模型值、調用應用程序以及渲染響應。在接收到用戶發(fā)起的頁面請求后,頁面中的組件樹進入生命周期的恢復視圖階段,待頁面中的組件樹遍歷完畢后將進入生命周期的下一階段,直到生命周期的全過程結束。在步驟S104中,遍歷復合組件中的子組件。在步驟S106中,將子組件的屬性值與復合組件的屬性值相關聯得到命名空間值。本實施例中,命名空間值是由屬性值構成的,屬性值是每一組件的唯一標識,例如,該屬性值可以是組件的ID。例如,若復合組件的的屬性值為parent,子組件的屬性值為children,則將子組件的屬性值與復合組件的屬性值相關聯得到的命名空間值為parent_children。如圖2所示,將子組件的屬性值與復合組件屬性值相關聯得到命名空間值的步驟為步驟S116,獲取子組件的屬性值。步驟S136,將子組件的屬性值設置于請求作用域中,與請求作用域中復合組件的屬性值相關聯得到命名空間值。本實施例中,請求作用域僅僅在請求開始到結束這一段時間內有效。當復合組件中的子組件遍歷完畢時,刪除請求作用域中復合組件的屬性值。在步驟S107中,獲取與子組件所處生命周期階段對應的調用方法。本實施例中,根據頁面請求、當前所處的生命周期階段進行查找得到訪問的組件所需的調用方法。子組件所處的生命周期階段不同,組件執(zhí)行的調用方法也各不相同。例如,在套用申請值階段,組件將調用processDecodes方法,若處理執(zhí)行驗證階段,則調用processValidators方法。根據組件所處的生命周期階段得到對應的調用方法名稱,再根據頁面請求、調用方法名稱以及命名空間值執(zhí)行調用方法,從而保證了調用方法作用于與命名空間值對應的子組件上。在步驟S108中,根據頁面請求以及命名空間值執(zhí)行調用方法。在步驟S105中,根據頁面請求、組件所處的生命周期階段對應的調用方法名稱執(zhí)行調用方法。
在一個具體的實施例中,當頁面中的組件為復合組件時,基于復合組件的請求處理方法還包括獲取復合組件的屬性值,并設置于請求作用域中的步驟。另一實施例中,上述基于復合組件的請求處理方法還包括了根據子組件的命名空間值返回調用方法的執(zhí)行結果。本實施例中,在執(zhí)行了調用方法后,根據命名空間值向對應的子組件返回執(zhí)行結果。在優(yōu)選的實施例中,如圖3所示,上述基于復合組件的請求處理方法包括以下步驟步驟S301,接收頁面請求。步驟S302,遍歷頁面中的組件。步驟S303,判斷頁面中的組件是否為復合組件,若是,則進入步驟S304中,若否,則進入步驟S312。
步驟S304,獲取復合組件的屬性值,并設置于請求作用域中。步驟S305,遍歷復合組件中的子組件,并獲取子組件的屬性值。步驟S306,將子組件的屬性值設置于請求作用域中,與復合組件的屬性值相關聯得到命名空間值。步驟S307,獲取與子組件所處生命周期階段對應的調用方法。步驟S308,根據頁面請求及命名空間值執(zhí)行調用方法。步驟S309,根據子組件的命名空間值返回調用方法的執(zhí)行結果。步驟S310,當復合組件中的子組件遍歷完畢時,刪除請求作用域中復合組件的屬性值。本實施例中,在復合組件中的子組件已經遍歷完畢時,刪除該復合組件設置在請求作用域中的屬性值。步驟S311,當頁面中的組件遍歷完畢后判斷生命周期的階段是否運行完畢,若是,則進入步驟S313,若否,則返回步驟S302。本實施例中,當頁面中的組件樹上的組件均被遍歷完畢之后,當前生命周期的階段已經結束,若此時還有生命周期中的下一階段需要運行,則進入下一階段,返回步驟S302 ;若當前生命周期的階段是生命周期中的最后一個階段,則說明頁面中的組件樹的生命周期結束。步驟S312,根據頁面請求、組件所處的生命周期階段對應的調用方法名稱執(zhí)行調用方法,并響應。步驟S313,返回調用方法的執(zhí)行結果。圖4示出了一個實施例中基于復合組件的請求處理系統的結構,該系統至少包括接收模塊10、遍歷模塊20、判斷模塊30、處理模塊40以及執(zhí)行模塊50。接收模塊10,用于接收頁面請求。本實施例中,用戶在瀏覽器中所顯示的頁面上激活任一組件,發(fā)起頁面請求。例如,在一個頁面中有多張照片,每張照片下方都設置了一個打分復合組件,瀏覽照片的用戶為使用打分復合組件對每張照片打分,通過鼠標點擊頁面上的打分復合組件,觸發(fā)了頁面請求向后臺發(fā)送,接收模塊10接收用戶所發(fā)起的頁面請求,以便于對用戶進行響應。遍歷模塊20,用于遍歷頁面中的組件。本實施例中,整個頁面是由一系列組件構成的組件樹,遍歷模塊20從組件樹的根結點開始遍歷,逐一訪問組件樹中的每一個組件。判斷模塊30,用于判斷頁面中的組件是否為復合組件,若是,則通知遍歷模塊20遍歷復合組件中的子組件,若否,則通知執(zhí)行模塊50根據頁面請求、組件所處的生命周期階段對應的調用方法名稱執(zhí)行調用方法。本實施例中,如果訪問的組件不是復合組件,則根據頁面請求、當前所處的生命周期階段進行查找得到訪問的組件所需要的調用方法,并執(zhí)行該方法。在JSF(Java Server Faces)開發(fā)的過程中,常常會遇到一個原生組件無法滿足所有需求的情況,需要使用多個原生組件來滿足所有需求。但是如果這些需求是很常見的,將會導致在多次重復地寫入一樣的代碼。為減少代碼量,將多個原生組件封裝成一個組件,這一封裝了多個原生組件的組件稱為復合組件。根據JSF標準規(guī)范,每一個組件都應當經過六個階段而完成生命周期。生命周期的六個階段包括恢復視圖、應用請求、執(zhí)行驗證、更新模型值、調用應用程序以及渲染響應。在接收到用戶發(fā)起的頁面請求后,頁面中的組件樹進入生命周期的恢復視圖階段,待頁面中的組件樹遍歷完畢后將進入生命周期的下一階段。在其它實施例中,當頁面中的組件遍歷完畢后,判斷模塊30判斷生命周期的階段 是否運行完畢,若是,則返回執(zhí)行結果,若否,則繼續(xù)遍歷頁面中的組件。處理模塊40,用于子組件的屬性值與復合組件的屬性值相關聯得到命名空間值,并獲取與子組件所處生命周期階段對應的調用方法。本實施例中,屬性值是每一組件的唯一標識,該屬性值可以是組件的ID。命名空間值是由屬性值構成的,例如,若復合組件的的屬性值為parent,子組件的屬性值為children,則處理模塊30將子組件的屬性值與復合組件的屬性值相關聯得到的命名空間值為par ent_ch i I dr en。執(zhí)行模塊50,用于根據頁面請求以及命名空間值執(zhí)行調用方法。本實施例中,所處的生命周期階段的不同,執(zhí)行模塊50執(zhí)行的調用方法也各不相同。若處理執(zhí)行驗證階段,則執(zhí)行模塊50調用processValidators方法。執(zhí)行模塊50根據組件所處的生命周期階段得到對應的調用方法名稱,再根據頁面請求、調用方法名稱以及命名空間值執(zhí)行調用方法,從而保證了調用方法作用于與命名空間值對應的子組件上。在一個具體的實施例中,如圖5所示,處理模塊40包括獲取單元401以及屬性值設置單兀403。獲取單元401,用于獲取復合組件的屬性值、子組件的屬性值以及與子組件生命周期階段對應的調用方法。屬性設置單元403,用于將復合組件的屬性值以及子組件的屬性值相關聯得到命名空間值,并將復合組件的屬性值以及子組件的屬性值相關聯得到命名空間值。本實施例中,請求作用域僅僅在請求開始到結束這一段時間內有效。另一實施例中,當復合組件中的子組件遍歷完畢時,屬性設置單元403刪除請求作用域中復合組件的屬性值。本實施例中,在復合組件中的子組件已經遍歷完畢時,屬性設置單元403刪除請求作用域中該復合組件設置在請求作用域中的屬性值。上述基于復合組件的請求處理方法及系統將復合組件的屬性值與子組件的屬性值相關聯得到命名空間值,并根據命名空間值進行了調用方法的執(zhí)行,極大地避免了同一頁面中多個復合組件互相干擾的狀況發(fā)生,在命名空間值的作用下,執(zhí)行了調用方法后僅對與該命名空間值對應的復合組件進行響應,在提高代碼復用率、降低開發(fā)成本的同時保證了復合組件之間的抗干擾性,也有效地降低了瀏覽器的資源消耗。
以上所述實施例僅表達了本發(fā)明的幾種實施方式,其描述較為具體和詳細,但并不能因此而理解為對本發(fā)明專利范圍的限制。應當指出的是,對于本領域的普通技術人員來說,在不脫離本發(fā)明構思的前提下,還可以做出若干 變形和改進,這些都屬于本發(fā)明的保護范圍。因此,本發(fā)明專利的保護范圍應以所附權利要求為準。
權利要求
1.一種基于復合組件的請求處理方法,包括以下步驟 接收頁面請求; 遍歷頁面中的組件,并判斷所述頁面中的組件是否為復合組件,若是,則 遍歷所述復合組件中的子組件; 將子組件的屬性值與復合組件的屬性值相關聯得到命名空間值; 獲取與子組件所處生命周期階段對應的調用方法; 根據所述頁面請求以及命名空間值執(zhí)行調用方法。
2.根據權利要求I所述的基于復合組件的請求處理方法,其特征在干,當所述頁面中的組件為復合組件時,所述方法還包括 獲取所述復合組件的屬性值,并設置于請求作用域中; 將子組件的屬性值與復合組件的屬性值相關聯得到命名空間值的步驟為 獲取所述子組件的屬性值,將所述子組件的屬性值設置于請求作用域中,與復合組件的屬性值相關聯得到命名空間值。
3.根據權利要求I所述的基于復合組件的請求處理方法,其特征在于,還包括 根據所述子組件的命名空間值返回調用方法的執(zhí)行結果。
4.根據權利要求2所述的基于復合組件的請求處理方法,其特征在于,還包括 當復合組件中的子組件遍歷完畢時,刪除所述請求作用域中復合組件的屬性值。
5.根據權利要求I所述的基于復合組件的請求處理方法,其特征在于,還包括 當頁面中的組件遍歷完畢后判斷生命周期的階段是否運行完畢,若是,則返回執(zhí)行結果,若否,則返回遍歷頁面中的組件的步驟。
6.一種基于復合組件的請求處理系統,其特征在于,至少包括 接收模塊,用于接收頁面請求; 遍歷模塊,用于遍歷頁面中的組件; 判斷模塊,用于判斷頁面中的組件是否為復合組件,若是,則通知所述遍歷模塊; 所述遍歷模塊還用于遍歷所述復合組件中的子組件; 處理模塊,用于將子組件的屬性值與復合組件的屬性值相關聯得到命名空間值,并獲取與子組件所處生命周期階段對應的調用方法; 執(zhí)行模塊,用于根據所述頁面請求以及命名空間值執(zhí)行調用方法。
7.根據權利要求6所述的基于復合組件的請求處理系統,其特征在干,所述處理模塊包括 獲取單元,用于獲取復合組件的屬性值、子組件的屬性值以及與子組件生命周期階段對應的調用方法; 屬性值設置単元,用于將復合組件的屬性值以及子組件的屬性值設置于請求使用域中,并將所述復合組件的屬性值以及子組件的屬性值相關聯得到命名空間值。
8.根據權利要求6所述的基于復合組件的請求處理方法,其特征在于,所述執(zhí)行模塊還用于根據所述子組件的命名空間值返回調用方法的執(zhí)行結果。
9.根據權利要求7所述的基于復合組件的請求處理方法,其特征在干,當復合組件中的子組件遍歷完畢時,所述屬性值設置單元還用于刪除所述請求作用域中復合組件的屬性值。
10.根據權利要求6所述的基于復合組件的請求處理方法,其特征在干,當頁面中的組件遍歷完畢后,所述判斷模塊判斷生命周期的階段是否運行完畢,若是,則返回執(zhí)行結果,若否,則繼續(xù)遍歷頁面中的組件。
全文摘要
一種基于復合組件的請求處理方法,包括以下步驟接收頁面請求;遍歷頁面中的組件,并判斷頁面中的組件是否為復合組件,若是,則遍歷復合組件中的子組件;將子組件的屬性值與復合組件的屬性值相關聯得到命名空間值;獲取與子組件生命周期階段對應的調用方法;根據頁面請求以及命名空間值執(zhí)行調用方法。上述基于復合組件的請求處理方法及系統,將復合組件的屬性值與子組件的屬性值相關聯得到命名空間值,并根據命名空間值進行調用方法的執(zhí)行,極大地避免了同一頁面多個復合組件互相干擾的狀況發(fā)生,在命名空間值作用下,執(zhí)行了調用方法后僅對與該命名空間值對應的復合組件進行響應,在提高代碼復合率、降低開發(fā)成本的同時保證了復合組件之間的抗干擾性。
文檔編號G06F9/44GK102779032SQ20111012139
公開日2012年11月14日 申請日期2011年5月11日 優(yōu)先權日2011年5月11日
發(fā)明者李斌 申請人:深圳市金蝶中間件有限公司