Géza
Géza

Reputation: 515

Using Session Bean provided data on JSF welcome page

I use JSF managed beans calling EJB methods that are provide data from database. I want to use some data already on the welcome page of the application. What is the best solution for it?

EJBs are injected into JSF managed beans and it looks like the injection is done after executing the constructor. So I am not able to call EJB methods in the constructor.

The normal place for EJB call is in the JSF action methods but how to call such a method prior to loding the first page of the application?

A possible solution would be to call the EJB method conditionally in a getter that is used on the welcome page, for example:

public List getProductList(){
  if (this.productList == null) 
    this.productList = myEJB.getProductList();
  return this.productList;
}

Is there any better solution? For example, in some config file?

Upvotes: 1

Views: 973

Answers (2)

Jorge L. Morla
Jorge L. Morla

Reputation: 630

if you want to make a call from xhtml view

<f:view>
    <f:metadata>
        <f:viewAction action="${myController.init()}" onPostback="true"/>
    </f:metadata>
 </f:view>

and your controller

public class MyController{
    public void init(){
        this.productList = myEJB.getProductList();
        ...

Upvotes: 0

BalusC
BalusC

Reputation: 1108722

You can do it in a method which is annotated with @PostConstruct. This will be executed once after the bean is constructed and all JSF managed property and resource injection is done.

@PostConstruct
public void init() {
    this.productList = myEJB.getProductList();
}

Upvotes: 1

Related Questions