2011-01-03 18 views
2

Ich werde einen Parameter von einer Seite (Facelet) an eine Managed Bean übergeben, deren Gültigkeitsbereich View Scope ist.Parameter an ViewScoped Bean übergeben

Ich versuche, es so zu tun:

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 

@ManagedBean 
@ViewScoped 
public class Mybean { 
    private int id; 


    public int getId() { 
    return id; 
    } 

    public void setId(int id) { 
    this.id = id; 
    }  
} 

Erste Seite:

<h:body>    
    <h:form> 
     <h:commandLink value="click" action="index"> 
     <f:setPropertyActionListener target="#{mybean.id}" value="20"/> 
     </h:commandLink> 
    </h:form> 
    </h:body> 

Zweite Seite:

<h:body> 
    param value #{param.id} 
    <br /> 
    bean value #{mybean.id} 
    <br /> 

    <h:messages/> 
    </h:body> 

Aber es 20 nicht zeigen

Antwort

1

@ViewScoped Bean bleibt nur für die Ansicht, die der Benutzer gerade sieht.

Sobald der Benutzer zu einer anderen Ansicht wechselte - die Bean wird zerstört und von Grund auf neu erstellt. Wenn Sie also dieselbe Bean für mehr als eine Seite verwenden möchten, verwenden Sie @SessionScoped Bean. Eine andere Möglichkeit besteht darin, in Java eine Klasse Singleton zu erstellen, und eine Bean aktualisiert den Wert in dieser Klasse, während die andere Bean den Wert daraus extrahiert.

+0

Sie haben Recht, und ich kann es auch in RequestScope ändern, richtig? – ehsun7b

+2

Die Singleton-Klasse behält die Werte wie eine ApplicationScoped-Bean bei! Ich meine der Wert wird für alle Besucher gleich sein, wird nicht sein? – ehsun7b

+0

Sie haben Recht! Daher können Sie die Session-Bean verwenden, um die Werte für viele Benutzer zu speichern – Dejell

Verwandte Themen