rich:select + a4j:ajax + backbutton browser
aldosilva Oct 6, 2011 4:16 PMHi everybory.
I have a problem when the user click on the backbutton in the browser.
I have a page with this code:
<h:panelGrid> <rich:panel> <f:facet name="header"> <h:outputText value="Selecione o Usuário"></h:outputText> </f:facet> <rich:select value="#{selectUserAndPhase.itemUserValue}" defaultLabel="Selecione" valueChangeListener="# {selectUserAndPhase.valueChanged}" id="selectUserMenu" required="true" requiredMessage="obrigatório"> <f:selectItems value="#{selectUserAndPhase.listUser}" /> <a4j:ajax event="selectitem" render="selectPhase" execute="@this" /> </rich:select> </rich:panel> <rich:message for="selectUserMenu" /> <br /> <a4j:outputPanel id="selectPhase" layout="block" > <rich:panel> <f:facet name="header"> <h:outputText value="Selecione a Fase"></h:outputText> </f:facet> <rich:select value="#{selectUserAndPhase.itemPhaseValue}" defaultLabel="Selecione" id="selectPhaseMenu" required="true" requiredMessage="obrigatório"> <f:selectItems value="#{selectUserAndPhase.listPhase}" /> </rich:select> </rich:panel> <rich:message for="selectPhaseMenu" /> </a4j:outputPanel> </h:panelGrid>
The problem occurs when the user goes to another page and return to this page through browser backbutton. The first rich:select doesn't reload
the items and the outputPanel has already done the validation.
Is there any way to reload the first rich:select when the user clicks on the backbutton?
I implemented the PhaseListener but didn't solve my problem.
public class NoBrowserCachePhaseListener implements PhaseListener{ private static final long serialVersionUID = 1L; public void afterPhase(PhaseEvent event) { // Do nothing special } public void beforePhase(PhaseEvent event) { FacesContext facesContext = event.getFacesContext(); HttpServletResponse response = (HttpServletResponse)facesContext.getExternalContext().getResponse(); response.addHeader("Pragma", "no-cache"); response.addHeader("Cache-Control", "no-cache"); response.addHeader("Cache-Control", "no-store"); response.addHeader("Cache-Control", "must-revalidate"); response.addHeader("Expires", "0"); } public PhaseId getPhaseId() { return PhaseId.RENDER_RESPONSE; } }