I have a page that has the setup as below with url like my.page.com/table.xhtml?id=123:
+----------------------------------------------+
|Meta information |
|----------------------------------------------|
| Search Fields Submit btn |
|----------------------------------------------|
| |
| |
| Big p:dataTable |
| with rowExpansion |
| |
|----------------------------------------------|
| Pager |
+----------------------------------------------+
id=123 is the request parameter that controls the content on the result table. All actions only reload the data table using AJAX.
id is loaded throught this :
<f:metadata>
<o:viewParam name="id" value="#{dataTable.id}" />
<f:viewAction action="#{dataTable.initialize}" />
</f:metadata>
This all works fine, until the session expires. At this point, nothing works. I cannot get data since I no longer have access to the id in question and the call to the DAO classes fetching the data do not have this.
By "no longer have access to the id" I mean that :
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id")
returns null. Also, the int id from my backing bean (which is loaded through the o:viewParam in the f:metadata suffers the same fate.
I know there are methods to catch a ViewExpiredException, but this is not what I want. I need the page to simply reload all values using the request parameter (in this case id) without the user knowing.
I (think I) need a @ViewScoped manage bean to control this complex table and all parameters, etc.
I am at a lost with regards to this. I have tried building my own ViewHandler to try to get it to simply rebuild (mimic a refresh) of the page, and tried to use the PrimeFaces ajaxExceptionHandler among other solutions. But all these get an error and display it. I just want to have access to my request parameter my.page.com/table.xhtml?id=123 from the backing bean.
Any help would be appreciated.
I am running on:
- Tomcat 7
- Mojarra 2.2.6
- Omnifaces 1.8.1
- Primefaces 5.0