Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Invoke JSF managed bean action on page load

Is there a way to execute a JSF managed bean action when a page is loaded?

If that's relevant, I'm currently using JSF 1.2.

like image 639
DD. Avatar asked Mar 15 '10 23:03

DD.


1 Answers

JSF 1.0 / 1.1

Just put the desired logic in the constructor of the request scoped bean associated with the JSF page.

public Bean() {     // Do your stuff here. } 

JSF 1.2 / 2.x

Use @PostConstruct annotated method on a request or view scoped bean. It will be executed after construction and initialization/setting of all managed properties and injected dependencies.

@PostConstruct public void init() {     // Do your stuff here. } 

This is strongly recommended over constructor in case you're using a bean management framework which uses proxies, such as CDI, because the constructor may not be called at the times you'd expect it.

JSF 2.0 / 2.1

Alternatively, use <f:event type="preRenderView"> in case you intend to initialize based on <f:viewParam> too, or when the bean is put in a broader scope than the view scope (which in turn indicates a design problem, but that aside). Otherwise, a @PostConstruct is perfectly fine too.

<f:metadata>     <f:viewParam name="foo" value="#{bean.foo}" />     <f:event type="preRenderView" listener="#{bean.onload}" /> </f:metadata> 
public void onload() {      // Do your stuff here. } 

JSF 2.2+

Alternatively, use <f:viewAction> in case you intend to initialize based on <f:viewParam> too, or when the bean is put in a broader scope than the view scope (which in turn indicates a design problem, but that aside). Otherwise, a @PostConstruct is perfectly fine too.

<f:metadata>     <f:viewParam name="foo" value="#{bean.foo}" />     <f:viewAction action="#{bean.onload}" /> </f:metadata> 
public void onload() {      // Do your stuff here. } 

Note that this can return a String navigation case if necessary. It will be interpreted as a redirect (so you do not need a ?faces-redirect=true here).

public String onload() {      // Do your stuff here.     // ...     return "some.xhtml"; } 

See also:

  • How do I process GET query string URL parameters in backing bean on page load?
  • What can <f:metadata>, <f:viewParam> and <f:viewAction> be used for?
  • How to invoke a JSF managed bean on a HTML DOM event using native JavaScript? - in case you're actually interested in executing a bean action method during HTML DOM load event, not during page load.
like image 102
BalusC Avatar answered Sep 21 '22 18:09

BalusC