What is the correct way to use RequestScoped Bean and rendered attribute?

一曲冷凌霜 提交于 2019-12-20 06:48:25

问题


does anybody know how to use RequestScoped bean together with rendered attribute in jsf? The rendered attribute is evaluated before applyValues phase and therefore is not correctly evaluated. I don't want to preserve any state. The example could be an outputPanel with a datatable and a button. The datatable gets a list of values. The wrapping outputPanel has the rendered attribute like:

<p:outputPanel rendered="#{not empty requestScopedBean.dataList}">
    <p:datatable value="#{requestScopedBean.dataList}">
        ...
    </p:datatable>

    <p:commandButton action="#{requestScopedBean.someAction}" />
</p:outputPanel>

After loading the page and clicking on the button, nothing happens, because the view is restored and expressions are evaluated - the bean does have an empty datalist and therefore the panel should not be rendered. This causes that the action method is not even called - because the button doesn't exist.


回答1:


If you're not interested in having a filled data table at that moment, just add an extra check in rendered attribute if the command button of interest has been invoked. You can do that by checking the presence of button's client ID in request parameter map.

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

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

See also:

  • How to let validation depend on the pressed button?


来源:https://stackoverflow.com/questions/32886764/what-is-the-correct-way-to-use-requestscoped-bean-and-rendered-attribute

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!