Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Call multiple backing bean methods at the same time

Tags:

jsf

jsf-2

Is there a way to call multiple methods from different backing beans in JSF?

I have an application that stores user information. I have multiple backing beans which are broken down into schedule, address, phone.. etc.

When the application initially loads everything works find but since all of my views are of type @ViewScope the lists of schedule, address, phone are maintained even if a new user is displayed.

I need to manually set the schedule, address, and phone lists to null when the user navigates away from the current person they are viewing IE I need to call a method in each managed bean at one point in time (When the user clicks on a commandLink).

Is it possible to call multiple bean methods on one commandLink?

like image 440
newtostack Avatar asked Feb 16 '11 18:02

newtostack


3 Answers

<h:commandLink action="#{jsfBean.submit}" value="execute multiple methods">
    <f:actionListener binding="#{jsfBean1.actionListener}"/>
    <f:actionListener binding="#{jsfBean2.actionListener}"/>
    <f:actionListener binding="#{jsfBean3.actionListener}"/>
</h:commandLink>

Using the above code, with methods in the beans have the ('default') signature of actionListener(ActionEvent event)

when you click the commandLink first the submit method will be executed. After that all the other actionListeners will be executed one by one...Hope that helps ;)

like image 155
Selvin Avatar answered Oct 16 '22 08:10

Selvin


You can have your commandLink reference one method which itself calls all the necessary methods.

like image 32
Sean Avatar answered Oct 16 '22 07:10

Sean


The answers here were close to working for me but also had to add parenthesis to the methods in the f:actionListener:

<h:commandLink action="#{jsfBean.submit}" value="execute multiple methods">
    <f:actionListener binding="#{jsfBean1.actionListener()}"/>
    <f:actionListener binding="#{jsfBean2.actionListener()}"/>
    <f:actionListener binding="#{jsfBean3.actionListener()}"/>
</h:commandLink>
like image 26
Tony Scialo Avatar answered Oct 16 '22 07:10

Tony Scialo