浏览器后退按钮不会清除旧的支持bean值

use*_*434 5 jsf-2

我们使用JSF2,我们有一个带有表单字段的页面,其命令按钮链接到支持bean.

当我们访问表单页面,输入值并提交时,支持bean会收到正确的值并将其带到下一页.如果我在浏览器中按下后退按钮,它将转到带有表单的上一页.如果我在表单中输入新值并提交,则支持bean仍会在步骤1中收到旧值.

Bal*_*usC 6

这很奇怪.也许您的bean被放入会话范围和/或浏览器已经从缓存中请求了该页面.首先,您要通过设置正确响应标头的过滤器禁用所有动态页面的浏览器缓存.

@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);
}
Run Code Online (Sandbox Code Playgroud)

将此过滤器映射FacesServlet到相同URL模式的servlet名称.

最后,但并非最不重要的是,不要将表单bean放在会话范围内.将它们放在请求或查看范围中.