2009-07-22 9 views
0

J'ai un backing bean, et je voudrais charger quelques listes lorsque le bean est instancié, de sorte que la liste puisse être utilisée dans une liste déroulante.Faces Backing Bean initialisation

Existe-t-il une méthode qui n'est appelée que lorsque le bean est créé?

+0

suffit d'utiliser le constructeur? – bmw0128

Répondre

1

Vous pouvez utiliser un initialiseur statique:

static { 
    //set up lists 
} 

Ou s'ils ne sont pas des listes statiques alors un bloc initialiseur:

{ 
    //set up lists 
} 

Tutorial here.

EDIT * Rappelez-vous que ces haricots qui soutiennent sont juste des POJO et fonctionnent comme n'importe quel autre objet Java. Vous pouvez configurer les faces-config.xml comme tel:

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

Personnellement, je trouve plus facile de nous juste un bloc initialiseur. C'est ce qu'ils sont pour.

+0

merci, j'apprécie – bmw0128

+0

Le problème est qu'il vous manque une initialisation. L'autre réponse, suggérant @PostConstruct, fonctionnera dans plus de cas. Votre suggestion est intéressante pour des choses très simples, mais cela ne fonctionnera pas si vous utilisez une injection de dépendance, par exemple. Même si vous n'utilisez pas DI pour le moment, l'utilisation de @PostConstruct vous permettra de le faire à l'avenir. Les blocs statiques/initialiseurs nécessiteraient que vous changiez beaucoup de choses pour que DI fonctionne plus tard. – ymajoros

0

Si vous voulez une liste purement déclarative des valeurs, les faces-config.xml offre quelques options:

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

Cette substance est traitée dans la section 5.3 Le Facility bean géré de la JSF 1.2 spec.

11

Une autre méthode consiste à utiliser l'attribut @PostConstruct pour qu'une méthode effectue l'initialisation pour vous une fois que Spring/JSF a créé le bean pour vous.

Par exemple:

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

Je vais essayer ça, on dirait que ça va faire l'affaire, merci! – bmw0128

0

La façon JSF-y de le faire est de lier une PhaseListener à la <f:view>, faites votre haricot mettre en œuvre PhaseListener, puis dans les méthodes de mise en œuvre alimenter le haricot à l'étape nécessaire.

+3

C'est trop, @PostConstruct fera l'affaire. – ymajoros

+0

Maintenant que @PostConstruct est une option, oui :-) –

Questions connexes