我们使用 JSF2,我们有一个带有表单字段的页面,其中命令按钮链接到支持 bean。
当我们访问表单页面、输入值并提交时,支持 bean 会收到正确的值并将其带到下一页。如果我按浏览器中的后退按钮,它将转到带有表单的上一页。如果我在表单中输入新值并提交,支持 bean 仍会收到步骤 1 中的旧值。
这很奇怪。也许您的 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);
}
将此过滤器映射到 servlet 名称FacesServlet
或采用相同的 URL 模式。
最后但并非最不重要的一点是,不要将表单 bean 放在会话范围内。将它们放入请求或视图范围中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)