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