Коли слід використовувати подію 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
дії лише за початковим запитом.
Дивитися також: