2013-01-06 48 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>