Когда следует использовать событие f: viewAction или preRenderView для инициализации данных для стихов страницы, используя аннотацию @PostConstruct?
Используйте <f:viewAction>
, если вы хотите выполнить метод до отображения HTML. Это особенно полезно, если вы хотите выполнять действия, основанные на значениях модели, установленных <f:viewParam>
во время фазы обновления значений модели. А именно, они недоступны в момент запуска @PostConstruct
. В JSF 2.0 / 2.1 этот тег не существовал, и вы должны использовать обходной путь preRenderView
.
Если компонент поддержки является @RequestScoped, эффективно ли они делают то же самое? (и так, тогда выбор за разработчиком? (@PostConstruct кажется "чище").
Нет, они точно не делают то же самое. @PostConstruct
предназначен для выполнения действий напрямую после построения bean-компонента и установки всех внедренных зависимостей и управляемых свойств, таких как @EJB
, @Inject
, @ManagedProperty
и т. Д. А именно, внедренные зависимости недоступен внутри конструктора бина. Таким образом, он будет запускаться только один раз для представления, сеанса или приложения, когда bean-компонент является видом, сеансом или приложением. <f:viewAction>
по умолчанию вызывается только при первоначальном GET-запросе, но может быть настроен с помощью атрибута onPostback="true"
, чтобы также вызываться при запросах обратной передачи. Событие preRenderView
вызывается при каждом HTTP-запросе (да, это также включает ajax-запросы!).
Подводя итог, используйте @PostConstruct
, если вы хотите выполнять действия над внедренными зависимостями и управляемыми свойствами, которые установлены в @EJB
, @Inject
, @ManagedProperty
и т. Д. Во время построения компонента. Используйте <f:viewAction>
, если вы также хотите выполнить действия со свойствами, установленными <f:viewParam>
. Если вы все еще используете JSF 2.0 / 2.1, используйте preRenderView
вместо <f:viewAction>
. При необходимости вы можете добавить проверку на FacesContext#isPostback()
, чтобы выполнить действие preRenderView
только для первоначального запроса.
Смотри также: