2011-09-15 22 views
5

我们使用JSF2,我们有一个页面,其中带有命令按钮的表单字段链接到后台bean。浏览器后退按钮不会清除旧的后台bean值

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

回答

6

这很奇怪。也许你的bean放在会话范围内和/或浏览器从缓存请求页面。首先,您希望通过设置正确响应标头的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放入会话范围。将它们放在请求或查看范围中。

+0

JSF Guru ... B.你的答案有助于解决一个错误...谢谢你... – user684434

+0

不客气。 – BalusC

+0

今天我发现GlassFish 3.1.1和ViewScope bean一样。当我第二次返回并按下提交按钮时,按钮**操作未执行**,浏览器(FireFox)以前面的结果显示视图。按钮代码是''。搜索表单和结果数据表在相同的视图xhtml文件中(但作为facelets包含)。我会尽力分析它。 – mjn

0

仔细学习JSF,JSF2.0在glassfish中工作很好,如果你有viewscoped beans并按浏览器返回/下一个链接JSF仔细加载了前面的页面,你也可以看到你的数据并提交它。