views:

26

answers:

1

If I want to create more than one instance of managed bean in JSF 2.0, under different names in the same scope, how should I proceed? Ideally, I want the equivilant to (for example):

@ManagedBeans({name="myManagedBean1",name="myManagedBean2"})
@RequestScoped
public class MyManagedBean {

}

Thanks ..

+1  A: 

You can't. It technically also doesn't make much sense. You're probably looking for a solution in the wrong direction for the particular functional requirement.

Your best bet is to have a parent bean and have those "multiple beans" as children.

@ManagedBean
@RequestScoped
public class Parent {
    private Child child1;
    private Child child2;
    // ...
}

so that you can access it by #{parent.child1} and #{parent.child2}. You can of course also use a List<Child> property or even Map<String, Child> instead to be more flexible.

With the faces-config.xml it's however possible to define multiple bean classes with a different name. Still then, I don't see how that's useful.

BalusC
Thanks. The requirement stems from the managed beans in question being backing beans for custom components, which have some fields bound to UIComponents on the page. Thus (albiet on rare occasions), I need multiple instance of the same type of backing bean for several of the same components, in this case UI dialogs. I thought your solution might be the case, but then this leaves one unable to use lifecycle annotations such as @PostConstruct. Thanks!
Dave