使用 RequestScoped Bean 和渲染属性的正确方法是什么?
What is the correct way to use RequestScoped Bean and rendered attribute?
有人知道如何在 jsf 中将 RequestScoped bean 与渲染属性一起使用吗?呈现的属性在 applyValues 阶段之前进行评估,因此未正确评估。我不想保留任何状态。该示例可以是带有数据表和按钮的 outputPanel。数据表获取值列表。包装 outputPanel 的呈现属性如下:
<p:outputPanel rendered="#{not empty requestScopedBean.dataList}">
<p:datatable value="#{requestScopedBean.dataList}">
...
</p:datatable>
<p:commandButton action="#{requestScopedBean.someAction}" />
</p:outputPanel>
加载页面并单击按钮后,没有任何反应,因为视图已恢复且表达式已求值 - 该 bean 确实有一个空数据列表,因此不应呈现面板。这会导致甚至不会调用操作方法 - 因为按钮不存在。
如果您当时对填充数据 table 不感兴趣,只要调用了感兴趣的命令按钮,只需在 rendered
属性中添加一个额外的检查。您可以通过检查请求参数映射中是否存在按钮的客户端 ID 来做到这一点。
<p:outputPanel rendered="#{not empty requestScopedBean.dataList or not empty param[someButton.clientId]}">
...
<p:commandButton binding="#{someButton}" ... />
</p:outputPanel>
另请参阅:
- How to let validation depend on the pressed button?
有人知道如何在 jsf 中将 RequestScoped bean 与渲染属性一起使用吗?呈现的属性在 applyValues 阶段之前进行评估,因此未正确评估。我不想保留任何状态。该示例可以是带有数据表和按钮的 outputPanel。数据表获取值列表。包装 outputPanel 的呈现属性如下:
<p:outputPanel rendered="#{not empty requestScopedBean.dataList}">
<p:datatable value="#{requestScopedBean.dataList}">
...
</p:datatable>
<p:commandButton action="#{requestScopedBean.someAction}" />
</p:outputPanel>
加载页面并单击按钮后,没有任何反应,因为视图已恢复且表达式已求值 - 该 bean 确实有一个空数据列表,因此不应呈现面板。这会导致甚至不会调用操作方法 - 因为按钮不存在。
如果您当时对填充数据 table 不感兴趣,只要调用了感兴趣的命令按钮,只需在 rendered
属性中添加一个额外的检查。您可以通过检查请求参数映射中是否存在按钮的客户端 ID 来做到这一点。
<p:outputPanel rendered="#{not empty requestScopedBean.dataList or not empty param[someButton.clientId]}">
...
<p:commandButton binding="#{someButton}" ... />
</p:outputPanel>
另请参阅:
- How to let validation depend on the pressed button?