2009-07-22 10 views
0

Ich habe eine Backing-Bean, und ich möchte ein paar Listen laden, wenn die Bean instanziiert ist, so dass die Liste in einem Dropdown-Menü verwendet werden kann.Gesichter Backing Bean Initialisierung

Gibt es eine Methode, die nur aufgerufen wird, wenn die Bean zum ersten Mal hergestellt wird?

+0

Verwenden Sie einfach den Konstruktor? – bmw0128

Antwort

1

könnten Sie eine statische Initialisierer verwenden:

static { 
    //set up lists 
} 

Oder wenn sie nicht statisch Listen dann ein Initialisierungsblocks:

{ 
    //set up lists 
} 

Tutorial here.

EDIT * Denken Sie daran, dass diese Sicherung Bohnen sind nur POJOs und funktionieren wie jedes andere Java-Objekt. Sie können bis faces-config.xml wie so eingestellt:

<managed-bean-class>mymanagedBean.ConstructorName</managed-bean-class> 

Persönlich finde ich es einfacher, nur uns ein Initialisierungsblocks. Dafür sind sie da.

+0

danke, ich schätze es – bmw0128

+0

Das Problem damit ist, dass Sie einige Initialisierung vermissen. Die andere Antwort, die @PostConstruct vorschlägt, wird in mehr Fällen nur funktionieren. Ihr Vorschlag ist gut für sehr einfache Dinge, aber es wird nicht funktionieren, wenn Sie zum Beispiel eine Abhängigkeitsinjektion verwenden. Selbst wenn Sie DI im Moment nicht verwenden, können Sie dies in Zukunft mit @PostConstruct tun. Static/Initializer-Blöcke würden erfordern, dass Sie viele Dinge ändern, damit DI später funktioniert. – ymajoros

0

Wenn Sie eine rein deklarative Werteliste wollen, bietet der faces-config.xml einige Optionen:

<managed-bean> 
    <managed-bean-name>staticListOfStuff</managed-bean-name> 
    <managed-bean-class>java.util.ArrayList</managed-bean-class> 
    <managed-bean-scope>application</managed-bean-scope> 
    <list-entries> 
     <value>Value 1</value> 
     <value>Value 2</value> 
    </list-entries> 
    </managed-bean> 

Dieses Zeug in Abschnitt 5.3 Die Managed Bean Einrichtung der JSF 1.2 spec bedeckt ist.

11

Eine andere Methode besteht darin, das @ PostConstruct-Attribut zu verwenden, damit eine Methode die Initialisierung für Sie ausführt, sobald Spring/JSF die Bean für Sie erstellt hat.

ZB:

@PostConstruct 
public void init() 
{ 
    List<SelectItem> list = new ArrayList<SelectItem)(); 
    list = getService().getMenuItems(); 
    setMenuItems(list); 
} 
+1

Ich werde das versuchen, sieht aus wie es die Arbeit machen wird, thx! – bmw0128

0

Der JSF-y Weg, dies zu tun, ist ein PhaseListener an die <f:view> zu binden, machen Sie Ihre Bohne PhaseListener implementieren, dann in den Umsetzungsmethoden die Bohne an der gewünschten Stufe zu füllen.

+3

Das ist Overkill, @ PostConstruct wird tun. – ymajoros

+0

Nun, dass @PostConstruct eine Option ist, ja :-) –

Verwandte Themen