我们使用JSF2,我们有一个页面,其中包含与支持bean链接的命令按钮的表单字段。
当我们访问表单页面,输入值并提交时,支持bean会收到正确的值并将其带到下一页。如果我按下浏览器中的后退按钮,它将转到带有表单的上一页。如果我在表单中输入新值并提交,则支持bean仍然会在步骤1中收到旧值。
答案 0 :(得分: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放在会话范围内。将它们放在请求或查看范围内。
答案 1 :(得分:0)
仔细学习JSF,在glassfish中JSF2.0工作不错,如果你有viewcoped bean并按下浏览器返回/下一个链接JSF小心地加载了以前的页面,你也可以看到你的数据并提交它。