AutoSubmit與PartialSubmit區別

Web2.0應用的兩大特點就是異步請求響應和局部頁面刷新。
比如:一個天氣預報頁面內容包括:國家下拉列表、省下拉列表、城市下拉列表,以及選擇城市的最近三天天氣情況。
當我們選擇國家後,只刷新省的下拉列表;選擇省後,只刷新城市的下拉列表;選擇城市時,刷新最近三天天氣情況。

總之,我們希望頁面能夠局部、動態地刷新,請求發送後不必等待響應就能馬上做其它事情,而響應回來後,頁面相關組件會得到通知,然後自動更新。
AutoSubmit、PartialSubmit、PartialTriggers這三個參數的主要作用就是完成異步請求響應和局部頁面刷新。
一般人對PartialTriggers的作用比較清楚,但AutoSubmit和PartialSubmit的區別就不太清楚了。

1. autoSubmit 只在輸入組件上纔有的一個屬性。
例如:< af:inputText id="productpriceIT" label="Price" autoSubmit="true" value="#{advertisement.price}" >

當設置爲true後,改變該組件的值後(焦點離開後),該組件的值(注意,不是整個form)將被提交到服務器,即進入【轉換、驗證、更新模型、重新呈現】的各個生命週期階段(注意先後次序)。
表單中的其它組件不受任何影響,表單也並未提交,只是該組件被異步地提交了。這意味着,即使表單中還有其它必填項,也不會提示“該項不能爲空”,因爲沒有觸發到這些必填項。
如果在Manage Bean中更新了該組件的值,必須要刷新該組件才能顯示新值,即進入【重新呈現】階段。刷新該組件有兩種方法:
(1)在頁面中設置autoSubmit + partialTriggers 刷新(這裏指向自己)
< af:inputText id="productpriceIT" label="Price" autoSubmit="true" value="#{advertisement.price}" partialTriggers="productpriceIT">
(2)在Manage Bean 中用代碼刷新
AdfFacesContext.getCurrentInstance().addPartialTarget(this.productpriceIT);

2. partialSubmit 只在命令組件上纔有的一個屬性。
例如:< af:commandLink id="showImageCL" text="#{areaAndCategoryProvider.showAreaImage?'Hide image':'Show image'}"
actionListener="#{areaAndCategoryProvider.toggleImage}" partialSubmit="true" partialTriggers="showImageCL" />

默認情況下,單擊命令鏈接或按鈕將導致表單提交或頁面導航,整個頁面將被刷新和重載,其頁面效果是頁面好像抖動了一下,用戶感受稍差一些。
這時,我們可以使用partialSubmit + partialTriggers,來刷新某個組件,其頁面效果是隻會刷新組件,而不會刷新整個頁面。
當然,表單還是會被提交,如果表單中有必填項,將會驗證出錯,這一點和沒有設置partialSubmit=true的按鈕或鏈接一樣,二者區別是:設置了partialSubmit=true的按鈕或鏈接界面效果不會抖動,同時點擊後會啓動 ppr 請求,如果設置了partialTriggers 的話。

與autoSubmit的區別是,後者僅處理更改的組件本身以及在其 partialTriggers 屬性中包含引用的所有組件,不會觸發表單中的必填項的驗證,除非這些必填項的partialTriggers 指向設置了autoSubmit=true的組件。

值得注意的是,CommandToolBarButton 默認partialSubmit =true,所以如果你需要刷新某個組件,必須設置partialTriggers,否則頁面不會被刷新。
而CommandButton 默認partialSubmit =false,默認會刷新整個頁面。

原文地址:http://blog.csdn.net/beckben/article/details/38711053

發佈了54 篇原創文章 · 獲贊 10 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章