2011-09-15 22 views
5

Usamos JSF2, tenemos una página con campos de formulario con un botón de comando vinculado al bean de respaldo.El botón Atrás del navegador no borra los valores del viejo bean de respaldo

Cuando accedemos a la página de formulario, ingresamos los valores y los enviamos, el bean de respaldo recibe los valores correctos y los lleva a la página siguiente. Si presiono el botón Atrás en el navegador, se lleva a la página anterior con el formulario. Si ingreso nuevos valores en el formulario y lo envío, el bean de respaldo sigue recibiendo los valores anteriores en el Paso 1.

Respuesta

6

Esto es impar. Quizás su bean se coloca en el ámbito de la sesión y/o el navegador ha solicitado la página desde la memoria caché. Para comenzar, desea deshabilitar la memoria caché del navegador para todas las páginas dinámicas mediante un filter que establece los encabezados de respuesta adecuados.

@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); 
} 

Ubicación del filtro en el nombre del servlet FacesServlet o en el mismo patrón de URL.

Por último, pero no menos importante, no coloque sus formularios en el alcance de la sesión. Póngalos en el alcance de solicitud o vista.

+0

JSF Guru ... B. Tu respuesta ayudó a resolver un error ... Gracias ... – user684434

+0

De nada. – BalusC

+0

Hoy he encontrado lo mismo con GlassFish 3.1.1, con un bean ViewScope. Cuando vuelvo y presiono el botón de enviar la segunda vez, la acción del botón ** no se ejecuta ** y el navegador (FireFox) muestra la vista con el resultado anterior. El código del botón es ''. El formulario de búsqueda y la tabla de datos de resultados están en el mismo archivo xhtml de vista (pero se incluyen como facelets). Trataré de analizarlo. – mjn

0

aprenda JSF con cuidado, JSF2.0 en el glassfish funciona bien, si tiene viewscoped beans y presione el navegador hacia atrás/los próximos enlaces JSF cargó cuidadosamente la página anterior también puede ver sus datos y enviarlos.

Cuestiones relacionadas