Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 在web浏览器中显示页面之前调用方法_Jsf_Jsf 2_Browser_Navigation_Lifecycle - Fatal编程技术网

Jsf 在web浏览器中显示页面之前调用方法

Jsf 在web浏览器中显示页面之前调用方法,jsf,jsf-2,browser,navigation,lifecycle,Jsf,Jsf 2,Browser,Navigation,Lifecycle,我有一个web应用程序,有两个页面A和B。从页面A我通过h:commandButton导航到B侧,并从支持bean生成方法,返回B.xhtml 当我在B页面时,我想通过我的web浏览器中的“后退”按钮返回到某个页面。在回到页面之前,我想从backingbean调用方法 我试着用手来做这件事 <f:metadata> <f:event type="preRenderView" listener="#{userManager.myMethod}" /> </

我有一个web应用程序,有两个页面A和B。从页面A我通过
h:commandButton
导航到B侧,并从支持bean生成方法,返回
B.xhtml

当我在B页面时,我想通过我的web浏览器中的“后退”按钮返回到某个页面。在回到页面之前,我想从backingbean调用方法

我试着用手来做这件事

<f:metadata> 
     <f:event type="preRenderView" listener="#{userManager.myMethod}" />
</f:metadata>

但这不是工作。你知道其他的想法吗?

当“后退”按钮实际上没有点击服务器时,它不会“工作”,而是显示以前从浏览器缓存中获取的页面。这将在不向服务器发出任何HTTP请求的情况下发生,因此不会调用与生成页面的HTML输出相关联的任何服务器端代码

您可以通过指示浏览器不缓存这些页面来解决此问题,以便始终直接从服务器请求这些页面,从而执行与生成页面HTML输出相关的所有服务器端代码,例如
preRenderView
事件侦听器

作为一个启动示例,假设您的
FacesServlet
位于
web.xml
中,并且注册在
FacesServlet
上,则此筛选器应该执行此操作:

@WebFilter(servletNames = "facesServlet")
public class NoCacheFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        if (!request.getRequestURI().startsWith(request.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) { // Skip JSF resources (CSS/JS/Images/etc)
            response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
            response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
            response.setDateHeader("Expires", 0); // Proxies.
        }

        chain.doFilter(req, res);
    }

    // init() and destroy() can be kept NOOP.
}
另见:

您能否为您的案例提供完整的可测试性?根据您提供的信息,似乎无法注意到问题所在。你把那个活动安排在哪里?