Как правильно использовать Бин RequestScoped и визуализированный атрибут?

Кто-нибудь знает, как использовать bean-компонент RequestScoped с атрибутом рендеринга в jsf? Визуализированный атрибут оценивается перед фазой applyValues ​​и, следовательно, оценивается неправильно. Я не хочу сохранять какое-либо государство. Примером может быть outputPanel с таблицей данных и кнопкой. Datatable получает список значений. Обертка outputPanel имеет отображаемый атрибут, например:

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

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

После загрузки страницы и нажатия на кнопку ничего не происходит, потому что представление восстановлено и выражения оценены - у компонента есть пустой список данных, и поэтому панель отображать не нужно. Это приводит к тому, что метод действия даже не вызывается - потому что кнопка не существует.

1 ответ

Решение

Если вы не заинтересованы в заполнении таблицы данных в этот момент, просто добавьте дополнительную регистрацию в rendered атрибут, если интересующая командная кнопка была вызвана. Вы можете сделать это, проверив наличие идентификатора клиента кнопки в карте параметров запроса.

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

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

Смотрите также:

Другие вопросы по тегам