2012-12-07 46 views
1

我只是有一個selectOneRadio,並且希望根據布爾值(帶有a4j的事件後的基本reRender)顯示(或不顯示)面板。 我與布爾結合好,動作確認上單擊布爾值的變化:reRender不會在事件發生後刷新

這是我selectOneRadio

<h:selectOneRadio value="#{myController.myBoolean}"> 
    <a4j:support event="onclick" action="#{...}" reRender="myPanel" /> 
     <f:selectItem itemLabel="Yes" itemValue="#{true}"/> 
     <f:selectItem itemLabel="No" itemValue="#{false}"/> 
</h:selectOneRadio> 

爲什麼不使用rendered屬性後工作重新呈現(無效果):

<a4j:outputPanel id="myPanel" rendered="#{myController.myBoolean}">... 

,而它的工作原理採用style屬性,通過改變能見度:

<a4j:outputPanel id="myPanel" style="#{myController.myBoolean ? 'visibility:visible;':'display:none;'}">... 
  • RichFaces的3.3.3.Final
  • 在每個瀏覽器

回答

2

問題同樣的bug可以如下解釋。 最初,您的面板「myPanel」未呈現,因爲呈現的屬性設置爲false。然後,現在通過選擇selectOneRadio組件將渲染值更改爲true。然後,您將通過在a4j:support標記中使用reRender="myPanel"來訪問reRender「myPanel」。
但不幸的是沒有「myPanel」被重新修訂,因爲頁面中沒有這樣的元素(因爲它沒有被渲染)。

您可以通過reRendering「myPanel」的父項來解決此問題。舉個例子,如果「myPanel」有父panel如下,

<a4j:outputPanel id="parentPanel"> 
    <a4j:outputPanel id="myPanel" rendered="#{myController.myBoolean}"> 
      ....... 
    </a4j:outputPanel> 
</a4j:outputPanel> 

現在reRender父如下

<a4j:support event="onclick" action=#{...}" reRender="parentPanel" /> 

注意:當你改變visibility代替rendered的屬性,它的工作原理是因爲雖然「myPanel」已隱藏,它仍然可以在您的頁面中使用。

+1

非常感謝,這工作。我懷疑問題來自那裏,但我沒有設法繞過。謝謝你的提示 ! –

相關問題