Domanda

C'è un modo per eseguire un JSF gestito azione di fagioli quando una pagina viene caricata?

Se questo è rilevante, Attualmente sto usando JSF 1.2.

È stato utile?

Soluzione

JSF 1.0 / 1.1

Basta mettere la logica desiderato nel costruttore della richiesta bean con scope associato alla pagina JSF.

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

JSF 1.2 / 2.x

Metodo

Usa @PostConstruct annotato su una richiesta o vista ambito di fagioli. Sarà eseguito dopo la costruzione e inizializzazione / impostazione di tutte le proprietà gestite e iniettate dipendenze.

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

Questa è fortemente raccomandato nel corso costruttore nel caso in cui si sta utilizzando un quadro di gestione di fagioli che usa le procure, come CDI, poiché il costruttore non può essere chiamato nei tempi che ci si aspetta di esso.

JSF 2.0 / 2.1

In alternativa, utilizzare <f:event type="preRenderView"> nel caso in cui si ha intenzione di inizializzare sulla base di <f:viewParam> troppo, o quando il fagiolo viene messo in un ambito più vasto l'ambito vista (che a sua volta indica un problema di progettazione, ma a parte). In caso contrario, un @PostConstruct è perfettamente bene anche.

<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 +

In alternativa, utilizzare <f:viewAction> nel caso in cui si ha intenzione di inizializzare sulla base di <f:viewParam> troppo, o quando il fagiolo viene messo in un ambito più vasto l'ambito vista (che a sua volta indica un problema di progettazione, ma a parte). In caso contrario, un @PostConstruct è perfettamente bene anche.

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

Si noti che questo può restituire un caso di navigazione String se necessario. Sarà interpretato come un redirect (in modo da non avete bisogno di un ?faces-redirect=true qui).

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

Vedi anche:

Altri suggerimenti

Un altro modo semplice è quello di utilizzare il fuoco il metodo prima che la vista è resa. Questo è meglio di postConstruct perché per sessionScope, postConstruct si attiva solo una volta ogni sessione. Questo fuoco ogni volta che la pagina viene caricata. Questo è naturalmente solo per JSF 2.0 e non per JSF 1.2.

Questo è come farlo -

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

E nel myController.java

 public void onPageLoad(){
    // Do something
 }

Modifica - Anche se questa non è una soluzione per la questione in questa pagina, aggiungo questo solo per le persone che utilizzano le versioni superiori di JSF

.

JSF 2.2 ha una nuova funzione che svolge questo compito utilizzando viewAction.

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

@PostConstruct viene eseguito una volta in un primo momento quando Bean Creato. la soluzione è creare una proprietà non utilizzato e fare la vostra azione nel metodo getter della struttura e Aggiungi questa proprietà ai file .xhtml in questo modo:

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

e nel codice del fagiolo:

public void setLoginStatus(String loginStatus) {
    this.loginStatus = loginStatus;
}

public String getLoginStatus()  {
    // Do your stuff here.
    return loginStatus;
}

chiama azione di fagioli da una sarà una buona idea, tenere attributo autorun = "true" Nell'esempio riportato di seguito

<p:remoteCommand autoRun="true" name="myRemoteCommand" action="#{bean.action}" partialSubmit="true" update=":form" />
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top