2013-01-08 102 views
0

我有一個tabView組件和在每個tab面板中,我有一個formPrimefaces和選擇器

我也有一個標誌圖像來改變我的應用程序的區域設置,當它被點擊時,我想重新加載所有tabView新的區域設置更改。

在一個tab面板一個形式,我用captcha成分,我不想重新加載它,因爲......它沒有所有重載頁面是不可能的(不支持部分Ajax的重裝,我會用Recaptcha.reload() JS來做重裝工作)。

所以我想重新加載我所有的tabView組件嵌套在panel組件名爲... panel沒有我的驗證碼。

  • tabView嵌套在一個名爲面板panel
  • 我的驗證碼有ID captcha

我2區域變化按鈕是其中之一:的

<p:commandLink update="@(:panel:not(captcha))" rendered="#{locale.locale != 'fr'}"> 
    <h:graphicImage url="resources/images/flags/flag_fr.png" width="30" height="30" /> 
    <f:setPropertyActionListener target="#{locale.locale}" value="fr" /> 
</p:commandLink> 
<p:commandLink update=":panel" rendered="#{locale.locale != 'en'}"> 
    <h:graphicImage url="resources/images/flags/flag_en.png" width="30" height="30" /> 
    <f:setPropertyActionListener target="#{locale.locale}" value="en" /> 
</p:commandLink> 

我已經測試過很多combinaisons update屬性中的選擇器但沒有成功。

任何選擇器的想法嗎?非常感謝

回答

0

當您使用PFS時,您引用的是組件的客戶端ID。例如,如果面板的客戶端ID是:panel,那麼您的選擇器將是@(#\\:panel)(您必須轉義分號)。檢查您生成的html並找出組件的真實客戶端ID。如果組件在命名容器中的容器id在子組件id之前被連接起來。例如,如果面板命名您的驗證碼的容器,它會是這樣的:@(#\\:panel:not(#\\:panel\\:captcha))。表單也是命名容器,所以你的ID可能會有更近的東西。

+0

嗨,謝謝。我的captcha id被翻譯成ID名爲'recaptcha_widget_div'的div容器。現在,我只是測試重新加載只有這個div來知道我應該使用哪個語法來重新加載所有沒有我的驗證碼。 '@(#recaptcha_widget_div)'或'@(#\\:recaptcha_widget_div)'不起作用 –

+0

檢查[this](http://stackoverflow.com/questions/8979089/primefaces-captcha-disappears-or-doesnt-更新刷新無效輸入) – partlov

+0

我已經看到這篇文章,但它不符合我的需要。在我的情況下,我可以用'Recaptcha.reload()'刷新驗證碼,並且工作正常。我只想刷新我所有的'tabView',除了我的驗證碼(它將通過'oncomplete'事件上的'Recaptcha.reload()'更新)。我知道我可以手動選擇所有的字段刷新,但我認爲可以使用選擇器...所以我搜索^^謝謝你反正 –