¿Cuándo usar f: ViewAction / preRenderView versus PostConstruct?
¿Cuándo se debe usar el evento f:viewAction
o preRenderView
para inicializar datos para una página versus usar la anotación @PostConstruct
? ¿La justificación para usar uno u otro se basa en el tipo de alcance del frijol de respaldo, por ejemplo, si el frijol de respaldo es @RequestScoped
, entonces la elección de usar f:viewAction
o preRenderView
sobre @PostConstruct
para inicializar su frijol de respaldo antes de renderizar la vista sería irrelevante ya que los dos resultarían en el mismo efecto?
F: ViewAction o Vista previa
<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()
{
}
}
2 answers
¿Cuándo se debe usar el evento f: ViewAction o preRenderView para inicializar los datos de una página usando la anotación @PostConstruct?
Use el <f:viewAction>
cuando desee ejecutar un método antes de que se procese el HTML. Esto es particularmente útil si desea realizar acciones basadas en valores del modelo establecidos por <f:viewParam>
durante la fase de actualización de valores del modelo. Es decir, no están disponibles en el momento en que se ejecuta @PostConstruct
. En JSF 2.0/2.1, esta etiqueta no existía y tienes que usar la solución preRenderView
.
Si el frijol 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á destinado a realizar acciones directamente después de la construcción y configuración de bean de todas las dependencias inyectadas y propiedades administradas, como @EJB
, @Inject
, @ManagedProperty
, etc. Es decir, las dependencias inyectadas no están disponibles dentro del constructor de bean. Por lo tanto, esto se ejecutará solo una vez por vista, sesión o aplicación cuando el bean esté en el ámbito de vista, sesión o aplicación. Por defecto, el atributo <f:viewAction>
solo se invoca en la solicitud GET inicial, pero se puede configurar a través del atributo onPostback="true"
para que también se invoque en las solicitudes postback. El evento preRenderView
se invoca en cada solicitud HTTP (¡sí, esto también incluye las solicitudes ajax!).
Resumido, utilice @PostConstruct
si desea realizar acciones en dependencias inyectadas y propiedades administradas que se establecen por @EJB
, @Inject
, @ManagedProperty
, etc durante la construcción de bean. Use <f:viewAction>
si también desea realizar acciones sobre las propiedades establecidas por <f:viewParam>
. Si todavía está en JSF 2.0 / 2.1, use preRenderView
en lugar de <f:viewAction>
. Si es necesario, puede agregar una verificación en FacesContext#isPostback()
para realizar la acción preRenderView
solo en la solicitud inicial.
Véase también:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:05
¿Necesita inicializar las propiedades de managed bean? -- >Entonces, use @ PostConstruct De lo contrario, ¿necesita trabajar con parámetros pasados desde otra vista? -- >Luego, use " Vista previa "
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-31 09:54:15