【发布时间】:2012-12-20 08:37:29
【问题描述】:
我正在使用 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
显示窗格名为..false
在 startLiveStream 内
从服务方法返回..
END PHASE PROCESS_VALIDATIONS 3
开始阶段 UPDATE_MODEL_VALUES 4
显示窗格名为..true
END PHASE UPDATE_MODEL_VALUES 4
开始阶段 INVOKE_APPLICATION 5
END PHASE INVOKE_APPLICATION 5
开始阶段 RENDER_RESPONSE 6
显示窗格名为..true
显示窗格名为..true
END PHASE RENDER_RESPONSE 6
【问题讨论】:
-
它应该只适用于普通的
h:form。您是否尝试过其他选项,例如删除panelGrid?看起来 JSF 没有找到要重新渲染的组件的 id。如果您在浏览器中刷新页面,它会显示吗?