page method example jsf jsf-2 postconstruct prerenderview viewaction

jsf - method - prerenderview example



Cuándo usar f: viewAction/preRenderView versus PostConstruct? (2)

¿Cuándo se debe usar el evento f: viewAction o preRenderView para inicializar los datos de una página con la anotación @PostConstruct?

Use <f:viewAction> cuando desee ejecutar un método antes de que se represente el HTML. Esto es particularmente útil si desea realizar acciones basadas en los valores del modelo establecidos por <f:viewParam> durante la fase de actualización de los valores del modelo. A saber, no están disponibles en el momento en que se ejecuta @PostConstruct . En JSF 2.0 / 2.1, esta etiqueta no existía y debe usar la solución alternativa preRenderView .

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 efectivamente lo mismo. El @PostConstruct está @PostConstruct a realizar acciones directamente después de la construcción y configuración de todas las dependencias y propiedades administradas de @EJB como @EJB , @Inject , @Inject , etc. A saber, las dependencias inyectadas no están disponibles dentro del constructor del bean. Esto se ejecutará solo una vez por vista, sesión o aplicación cuando el bean es view, session o application scoped. La <f:viewAction> se invoca de manera predeterminada en la solicitud GET inicial, pero también se puede onPostback="true" través del onPostback="true" para que se invoque en solicitudes de devolución de datos. El evento preRenderView se invoca en cada solicitud HTTP (sí, ¡esto también incluye solicitudes ajax!).

Resumido, use @PostConstruct si desea realizar acciones en dependencias inyectadas y propiedades administradas que se establecen mediante @EJB , @Inject , @Inject , etc. durante la construcción de bean. Utilice <f:viewAction> si también desea realizar acciones en las propiedades establecidas por <f:viewParam> . Si todavía está utilizando JSF 2.0 / 2.1, use preRenderView lugar de <f:viewAction> . Si es necesario, puede agregar una FacesContext#isPostback() en FacesContext#isPostback() para realizar la acción preRenderView solo en la solicitud inicial.

Ver también:

¿Cuándo se debe usar el evento f:viewAction o preRenderView para inicializar los datos de una página en lugar de utilizar la anotación @PostConstruct ? ¿El fundamento para usar uno u otro depende del tipo de alcance del bean de respaldo? Por ejemplo, si el bean de respaldo es @RequestScoped , entonces la opción de usar f:viewAction o preRenderView sobre @PostConstruct para inicializar su bean de respaldo antes de la renderización la vista es irrelevante ya que los dos producirían el mismo efecto?

f: viewAction o preRenderView

<f:metadata> <f:viewAction action="#{myBean.initialize}" /> </f:metadata>

<f:metadata> <f:event type="preRenderView" listener="#{myBean.initialize}"/> </f:metadata>

o

@PostConstruct

public class MyBean { @PostConstruct public void initialize() { } }


¿Necesita inicializar las propiedades del bean gestionado? -> Entonces, use @ PostConstruct De lo contrario, ¿necesita trabajar con parámetros pasados ​​desde otra vista? -> Luego, usa " preRenderView "