2013-01-06 50 views
0

我正在開發一個使用JSF 1.2(sun RI)和richFaces 3.3的應用程序。渲染屬性不渲染富值面板的值更改偵聽器

我想在列表值在選擇列表下方的選擇列表中更改列表值時顯示一個面板。

以下是對於相同的代碼:

> <a4j:form ajaxSubmit="true">    
>   
<h:panelGrid id="videoServiceTab">          <h:outputLabel for="deviceSelect" value="Select Device :"/>      
>    
>    <h:selectOneMenu id="deviceId" value="#{deviceBean.deviceId}" valueChangeListener="#{deviceBean.startLiveStream}"> 
>     <f:selectItems value="#{deviceBean.userDevices}"/> 
>     <a4j:support event="onchange" reRender="videoPanel" /> 
>    </h:selectOneMenu>           
>    <rich:panel id="videoPanel" rendered="#{deviceBean.showPane}"> 
>     My Panel.. 
>    </rich:panel>            </h:panelGrid> 
</a4j:form> 

1)當選擇了列表中的值,valueChangeListener被調用,它在一個方法更新showPane值(套爲true時,默認值爲false)

2)但即使showPane值設置爲true,富文本面板也不會顯示。

3)以下是帶有jsf的「PhaseListener」的日誌,它清楚地表明,在「RENDER_RESPONSE」完成之前,showPane值設置爲true 仍然沒有顯示id爲videoPanel的富含面板。

4)支持bean(deviceBean)是請求作用域。

-------------日誌相聽者----------

開始相位PROCESS_VALIDATIONS 3

是顯示窗格called..false

內部startLiveStream

從服務方法返回..

結束階段PROCESS_VALIDATIONS 3

開始相位UPDATE_MODEL_VALUES 4

是顯示窗格called..true

結束階段UPDATE_MODEL_VALUES 4

開始相位INVOKE_APPLICATION 5

結束階段INVOKE_APPLICATION 5

開始相位RENDER_RESPONSE 6

是顯示窗格,名爲..true

是顯示窗格called..true

結束階段RENDER_RESPONSE 6

+0

它應該只是與正常的字中,h工作這對於panelGrid的真:form'。你有沒有嘗試其他選項,如刪除'panelGrid'?它看起來像JSF沒有找到組件的ID reRender ..如果刷新頁面在瀏覽器中顯示它? –

回答

0

我嘗試下面的代碼和它的工作。如從A4J的文檔明顯:outputPanel,它包裝需要被更新/修改的組件,如下面

<a4j:outputPanel layout="none"> 
    <h:panelGrid id="videoPanel" rendered="#{deviceBean.showPane}"> 
    Display Panel.. 
              </h:panelGrid>  
    </a4j:outptPanel>