Invocar JSF managed bean acción en la página de carga

Es allí una manera de ejecutar una JSF managed bean acción cuando se carga una página?

Si que es relevante, actualmente estoy usando JSF 1.2.

duplicar stackoverflow.com/questions/1686821/…
Aunque no estoy seguro, no hay ambigüedad en la pregunta. Mientras él no explícitamente estado de «descarga de archivos en la página de carga», o «fuego» y «nueva solicitud en la página de carga», o algo así, entonces el mencionado tema no es necesariamente un duplicado de este.
Respuesta correcta se da aquí stackoverflow.com/a/1710413/362752

OriginalEl autor DD. | 2010-03-15

4 Kommentare

  1. 74

    JSF 1.0 /1.1

    Acaba de poner a la lógica deseada en el constructor de la solicitud ámbito de frijol asociado con la página JSF.

    public Bean() {
        //Do your stuff here.
    }

    JSF 1.2 /2.x

    Uso @PostConstruct anotado método en una solicitud o en la vista ámbito de frijol. Será ejecutado después de la construcción y de inicialización y configuración de todas las propiedades administradas y la inyección de dependencias.

    @PostConstruct
    public void init() {
        //Do your stuff here.
    }

    Esto es recomendado más de constructor en caso de que usted está usando un bean marco de gestión que utiliza proxies, como la CDI, porque el constructor no podrá ser llamado en el momento que usted esperaría.

    JSF 2.0 /2.1

    Alternativamente, el uso de <f:event type="preRenderView"> en caso de que usted tiene la intención de inicializar basado en <f:viewParam> demasiado, o cuando el grano se coloca en un ámbito más amplio que la vista alcance (que a su vez indica un problema de diseño, pero dejando eso de lado). De lo contrario, un @PostConstruct está perfectamente bien.

    <f:metadata>
        <f:viewParam name="foo" value="#{bean.foo}" />
        <f:event type="preRenderView" listener="#{bean.onload}" />
    </f:metadata>
    public void onload() { 
        //Do your stuff here.
    }

    JSF 2.2+

    Alternativamente, el uso de <f:viewAction> en caso de que usted tiene la intención de inicializar basado en <f:viewParam> demasiado, o cuando el grano se coloca en un ámbito más amplio que la vista alcance (que a su vez indica un problema de diseño, pero dejando eso de lado). De lo contrario, un @PostConstruct está perfectamente bien.

    <f:metadata>
        <f:viewParam name="foo" value="#{bean.foo}" />
        <f:viewAction action="#{bean.onload}" />
    </f:metadata>
    public void onload() { 
        //Do your stuff here.
    }

    Tenga en cuenta que esto puede volver un String de navegación en caso de ser necesario. Se interpreta como una redirección (por lo que no necesita un ?faces-redirect=true aquí).

    public String onload() { 
        //Do your stuff here.
        //...
        return "some.xhtml";
    }

    Véase también:

    su respuesta es grande y se ajuste a mis necesidades… Pero una pregunta… En mi D. constructor voy a añadir un contenido que será visible en la vista de lado (en la misma jsp). En este caso mi jsp no ver esta información en el primer tiempo. Pero si puedo volver a cargar una página en la que el contenido es visible. Podemos manejar esta cosa alguna manera?
    Esta respuesta sólo funcionará una vez si tengo un ámbito de sesión. Existe una mejor forma de implementar esto para el ámbito de la sesión bean?
    las respuestas van a funcionar como se esperaba. Como BalusC dijo, uso los dos últimos ejemplos de los granos que tienen un alcance más amplio que el de ver-ámbito de aplicación. Para aquellos curiosos acerca de dónde colocar el f:metadata información en un ui:composition página: inmediatamente después de la ui:composition y antes de una posible ui:define o igual etiquetas.
    usted debe utilizar «f:evento» en lugar de «f:viewAction», si usted está usando jsf 2.0+

    OriginalEl autor BalusC

  2. 11

    Otra forma fácil es utilizar el fuego, el método antes de que la vista se representa. Esto es mejor que postConstruct porque para sessionScope, postConstruct aparecerá sólo una vez en cada sesión. Esto disparará cada vez que se carga la página. Esto es por supuesto sólo para JSF 2.0 y no para JSF 1.2.

    Esto es cómo hacerlo –

    <html xmlns:f="http://java.sun.com/jsf/core">
          <f:metadata>
              <f:event type="preRenderView" listener="#{myController.onPageLoad}"/>
          </f:metadata>
    </html>

    Y en el myController.java

     public void onPageLoad(){
        //Do something
     }

    EDICIÓN – Aunque esto no es una solución para la cuestión en esta página, puedo agregar esto sólo para las personas que utilizan versiones superiores de JSF.

    JSF 2.2 tiene una nueva función que realiza esta tarea mediante viewAction.

    <f:metadata>
        <f:viewAction action="#{myController.onPageLoad}" />
    </f:metadata>

    OriginalEl autor stolen_leaves

  3. 9

    @PostConstruct se ejecuta una VEZ en primera, cuando Haba Creado.
    la solución es crear un Inusitado de la propiedad y Hacer su Acción en el método Getter de esta propiedad
    y agregarla a su .xhtml archivo como este :

    <h:inputHidden  value="#{loginBean.loginStatus}"/>

    y en tu bean código:

    public void setLoginStatus(String loginStatus) {
        this.loginStatus = loginStatus;
    }
    
    public String getLoginStatus()  {
        //Do your stuff here.
        return loginStatus;
    }
    Así que usted está utilizando solamente un ámbito de sesión frijoles? Eso es una Mala Práctica. Además, su ejemplo es pobre. Los captadores se puede llamar más de una vez en el bean de la vida, y no deben ser explotado para ejecutar cosas de negocios. Sólo tiene que utilizar un ámbito de petición de frijol y hacer el trabajo en el constructor o @PostConstruct.

    OriginalEl autor Amin Bahiraei

  4. 0

    llamar bean acción de una voluntad de ser una buena idea,mantener atributo autoRun=»true»
    ejemplo a continuación

    <p:remoteCommand autoRun="true" name="myRemoteCommand" action="#{bean.action}" partialSubmit="true" update=":form" />
    ¿Por qué es esto una ‘buena idea’ cuando las soluciones anteriores no necesitan una cantidad adicional de ida y vuelta.

    OriginalEl autor sijo jose

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea