Как правильно использовать Бин 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>