¿Cuándo se debe usar el evento f: viewAction o preRenderView para inicializar los datos de los versículos de una página usando la anotación @PostConstruct?
Utilice el <f:viewAction>cuando desee ejecutar un método antes de que se renderice el HTML. Esto es particularmente útil si desea realizar acciones basadas en los valores del modelo establecidos <f:viewParam>durante la fase de actualización de los valores del modelo. Es decir, no están disponibles en el momento de las @PostConstructcarreras. En JSF 2.0 / 2.1, esta etiqueta no existía y debe usar la preRenderViewsolución alternativa.
Si el bean de respaldo es @RequestScoped, ¿efectivamente hacen exactamente lo mismo? (¿Y entonces depende de la elección del desarrollador? (@PostConstruct parece "más limpio").
No, definitivamente no hacen lo mismo de manera efectiva. El @PostConstructmismo se pretende realizar acciones directamente después de la construcción y el ajuste de todas las dependencias inyectados de frijol y propiedades administradas como @EJB, @Inject, @ManagedProperty, etc. Es decir, las dependencias inyectados no están disponibles dentro constructor del frijol. Esto, por lo tanto, se ejecutará solo una vez por vista, sesión o aplicación cuando el bean tenga un alcance de vista, sesión o aplicación. De <f:viewAction>forma predeterminada, solo se invoca en la solicitud GET inicial, pero se onPostback="true"puede configurar mediante el atributo para que se invoque también en las solicitudes de devolución. El preRenderViewevento se invoca en cada solicitud HTTP (sí, ¡esto también incluye solicitudes ajax!).
Resumida, su uso @PostConstructsi desea realizar acciones en las dependencias de colada y propiedades administradas que son fijados por @EJB, @Inject, @ManagedProperty, etc durante la construcción de frijol. Úselo <f:viewAction>si también desea realizar acciones en las propiedades establecidas por <f:viewParam>. Si todavía está en JSF 2.0 / 2.1, use en preRenderViewlugar de <f:viewAction>. Si es necesario, puede agregar una marca FacesContext#isPostback()para realizar la preRenderViewacción solo en la solicitud inicial.
Ver también:
¿Necesita inicializar las propiedades del bean administrado? -> Luego, use @ PostConstruct De lo contrario, ¿necesita trabajar con parámetros pasados desde otra vista? -> Luego, usa " preRenderView "
fuente