我正在使用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)是请求范围的。
-------------记录阶段监听器----------
START PHASE PROCESS_VALIDATIONS 3
是名为..false的显示窗格
在startLiveStream里面
从服务方法返回..
END PHASE PROCESS_VALIDATIONS 3
START PHASE UPDATE_MODEL_VALUES 4
是名为..true的显示窗格
END PHASE UPDATE_MODEL_VALUES 4
START PHASE INVOKE_APPLICATION 5
结束阶段INVOKE_APPLICATION 5
START PHASE RENDER_RESPONSE 6
是名为..true的显示窗格
是名为..true的显示窗格
END PHASE RENDER_RESPONSE 6
答案 0 :(得分:0)
我尝试了以下代码并且有效。从a4j:outputPanel的文档中可以看出,它包装了需要更新/修改的组件,对于panelGrid也是如此,如下所示
<a4j:outputPanel layout="none">
<h:panelGrid id="videoPanel" rendered="#{deviceBean.showPane}">
Display Panel..
</h:panelGrid>
</a4j:outptPanel>