JSF f:event preRenderView is triggered by f:ajax calls and partial renders, something else? JSF f:event preRenderView is triggered by f:ajax calls and partial renders, something else? ajax ajax

JSF f:event preRenderView is triggered by f:ajax calls and partial renders, something else?


I had the same need not too long ago. I ended up using something suggested by BalusC.

There is a method in the FacesContext class that lets you know if you're dealing with a full blown request or a partial processing of some sort:

FacesContext.getCurrentInstance().isPostback()

This way you can still use the preRenderView technique and check if it's a postback in the listener. I found that particularly useful because I needed a session bean as the user had to navigate to another page and come back. If I used view scoped beans (like suggested above by Brian), I'd lose the info I had before navigating away.


Another option would be to put your preRenderView functionality in a @PostConstruct method of a ViewScoped managed bean. This logic would be executed when the bean is initialized, and you you maintain the same instance of the bean for all your ajax requests until you change views.


Another possibility is to check if the request is an ajax one or not in the preRenderView method. You can also perform the load conditionally considering other factors such as if the request is a GET or not and if validation failed or not (view params validation can fail on GET page).

boolean getMethod = ((HttpServletRequest) fc.getExternalContext().getRequest()).getMethod().equals("GET") ? true : false;boolean ajaxRequest = fc.getPartialViewContext().isAjaxRequest();boolean validationFailed = fc.isValidationFailed();