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

标签 jsf-2

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

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

最佳答案

这很奇怪。也许您的 bean 被放入 session 范围和/或浏览器已从缓存中请求页面。首先,您想通过 filter 禁用所有动态页面的浏览器缓存。它设置了正确的响应头。

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

将此过滤器映射到 FacesServlet 的 servlet 名称上或使用相同的 URL 模式。

最后但并非最不重要的一点是,不要将您的表单 bean 放在 session 范围内。将它们放在请求或 View 范围内。

关于jsf-2 - 浏览器后退按钮不会清除旧的支持 bean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7437475/

相关文章:

jsf - f :viewParam only pass query string in url when first page uses the same managed bean as the second page? 是否

jsf - 了解 SelectItemGroup

java - 从 JSF 中的数据表获取选定行数据

jsf - 发生验证错误时突出显示 JSF 中的 inputText

java - JSF 中的值转换究竟发生在什么时候?

java - 在 JSF 中使用 h :inputFile and javax. servlet.http.Part 上传之前验证文件

jsf - 如何从 Primefaces Breadcrumb 的 DefaultMenuModel 中删除 MenuItem

java - JSF h :outputStylesheet converter - dynamic css?

jsf-2 - Primefaces dataGrid 显示过多的行和列设置的项目

ajax - JSF 2 ajax 按钮在 session 超时后不进行服务器调用