jsf-2 - method - prerenderview example
Cuándo usar preRenderView versus viewAction? (1)
¿Cuándo se debe usar el evento preRenderView para inicializar los datos de una página en comparación con el uso de viewAction? ¿Son iguales en uso y tienen el mismo efecto?
evento preRenderView
<f:metadata>
<f:event type="preRenderView" listener="#{myBean.initialize}"/>
</f:metadata>
o
viewAction
<f:metadata>
<f:viewAction action="#{myBean.initialize}"/>
</f:metadata>
En la práctica, se pueden usar para lograr el mismo efecto, pero viewAction
(nuevo con JSF2.2) viene con las siguientes mejoras:
onPostback
:viewAction
viene con este atributo que le permite especificar si desea que la acción se ejecute en la devolución de datos a la misma vista (es decir, al actualizar la página o al enviar el botón, etc.). Por defecto esfalse
, por lo que ni siquiera tiene que especificarlo si no es necesario. Para lograr el mismo efecto conpreRenderView
, necesitarás<f:metadata> <f:event type="preRenderView" rendered="#{facesContext.postBack}" listener="#{myBean.initialize}"/> </f:metadata>
phase
: este atributo le permite especificar que la acción se ejecute durante una fase JSF específica. Su valor predeterminado esINVOKE_APPLICATION
, pero todos los demás JSF Phase Ids son válidos aquí.if
: este atributo le permite suministrar una expresión de valor que evalúa a un resultado booleano. La acción de vista solo se ejecutará en el resultado de esta expresión.immediate
: este atributo ahora otorga la capacidad para que unaviewAction
de vista se ejecute durante la faseAPPLY_REQUEST_VALUES
(en comparación con la faseINVOKE_APPLICATION
predeterminada), lo que le permite comportarse como unUIComponent
regular
En general, viewAction
es un enfoque de diseño más limpio para llevar a cabo los comandos de vista.