¿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 @PostConstruct
carreras. En JSF 2.0 / 2.1, esta etiqueta no existía y debe usar la preRenderView
solució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 @PostConstruct
mismo 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 preRenderView
evento se invoca en cada solicitud HTTP (sí, ¡esto también incluye solicitudes ajax!).
Resumida, su uso @PostConstruct
si 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 preRenderView
lugar de <f:viewAction>
. Si es necesario, puede agregar una marca FacesContext#isPostback()
para realizar la preRenderView
acción solo en la solicitud inicial.
Ver también: