使用RequestScoped Bean和呈现属性的正确方法是什么?

时间:2015-10-01 11:43:18

标签: jsf rendered-attribute requestscope

有人知道如何在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确实有一个空的datalist,因此不应渲染面板。这导致甚至没有调用action方法 - 因为按钮不存在。

1 个答案:

答案 0 :(得分:2)

如果您当时对填充数据表不感兴趣,只需在调用了感兴趣的命令按钮时在rendered属性中添加额外的检查。您可以通过检查请求参数映射中是否存在按钮的客户端ID来执行此操作。

<p:outputPanel rendered="#{not empty requestScopedBean.dataList or not empty param[someButton.clientId]}">
    ...

    <p:commandButton binding="#{someButton}" ... />
</p:outputPanel>

另见: