Когда следует использовать событие f: viewAction или preRenderView для инициализации данных для стихов страницы с помощью аннотации @PostConstruct?
Используйте, <f:viewAction>
если вы хотите выполнить метод до отображения HTML. Это особенно полезно, если вы хотите выполнять действия на основе значений модели, установленных на <f:viewParam>
этапе обновления значений модели. А именно они недоступны на данный момент @PostConstruct
. В JSF 2.0 / 2.1 этого тега не существовало, и вы должны использовать preRenderView
обходной путь.
Если вспомогательный компонент - это @RequestScoped, действительно ли они делают то же самое? (так что тогда выбор разработчика? (@PostConstruct кажется «чище»).
Нет, они точно не делают то же самое. @PostConstruct
Является intented для выполнения действий непосредственно после строительства бин и установки всех инжектированных зависимостей и управляемых свойств , таких как @EJB
, @Inject
, @ManagedProperty
и т.д. А именно, инъецированные зависимости не доступны внутри конструктора компонента. Таким образом, это будет запускаться только один раз для каждого представления, сеанса или приложения, когда компонент имеет область видимости, сеанса или приложения. По <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
действия только по первоначальному запросу.
Смотрите также: