2011-09-15 27 views
5

Utilizziamo JSF2, abbiamo una pagina con campi modulo con pulsante di comando collegato al bean di supporto.Il pulsante Indietro del browser non cancella i vecchi valori del bean backing

Quando si accede alla pagina del modulo, immettere i valori e inviare, il bean di supporto riceve i valori corretti e lo porta alla pagina successiva. Se premo il pulsante Indietro nel browser, ci vuole la pagina precedente con il modulo. Se inserisco nuovi valori nel modulo e invio, il backing bean riceve ancora i vecchi valori nel passaggio 1.

risposta

6

Questo è dispari. Forse il tuo bean è inserito nello scope della sessione e/o il browser ha richiesto la pagina dalla cache. Per iniziare, desideri disattivare la cache del browser per tutte le pagine dinamiche con uno filter che imposta le intestazioni di risposta appropriate.

@Override 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
    HttpServletRequest req = (HttpServletRequest) request; 
    HttpServletResponse res = (HttpServletResponse) response; 

    if (!req.getRequestURI().startsWith(req.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) { // Skip JSF resources (CSS/JS/Images/etc) 
     res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
     res.setHeader("Pragma", "no-cache"); // HTTP 1.0. 
     res.setDateHeader("Expires", 0); // Proxies. 
    } 

    chain.doFilter(request, response); 
} 

Mappa del filtro sul nome del servlet FacesServlet o sullo stesso modello di URL.

Ultimo, ma non meno importante, non inserire i bean di form nello scope della sessione. Inserirli nella richiesta o visualizzare l'ambito.

+0

JSF Guru ... B. La tua risposta ha aiutato a risolvere un bug ... Grazie ... – user684434

+0

Prego. – BalusC

+0

Oggi ho trovato lo stesso con GlassFish 3.1.1, con un bean ViewScope. Quando torno indietro, premo il pulsante di invio la seconda volta che il pulsante ** non viene eseguito ** e il browser (FireFox) visualizza la vista con il risultato precedente. Il codice del pulsante è ''. Il modulo di ricerca e il datatable del risultato si trovano nella stessa vista del file xhtml (ma inclusi come facelet). Proverò ad analizzarlo. – mjn

0

learn JSF con attenzione, JSF2.0 nel glassfish funzionano bene, se si dispone di bean viewcop e premere browser indietro/link successivi JSF ha caricato con attenzione la pagina precedente, inoltre è possibile visualizzare i dati e inviarli.

Problemi correlati