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
JSF2.0每页生成多个请求_Jsf_Servlets_Jsf 2_Servlet Filters - Fatal编程技术网

JSF2.0每页生成多个请求

JSF2.0每页生成多个请求,jsf,servlets,jsf-2,servlet-filters,Jsf,Servlets,Jsf 2,Servlet Filters,我实现了一个过滤器,通过检查会话中的@SessionScopedbean来检查用户是否登录。然而,当我开始测试它时,我注意到每当我访问我的一个页面时,过滤器都会被多次调用 我发现我需要忽略AJAX请求,这减少了我的过滤器被调用的次数,但每次加载页面时触发的请求数量仍然不止一个 通过反复试验,我发现请求将由以下XHTML标记生成(均嵌入标记中): 第二个标记是OmniFaces库的一部分 你知道为什么我会收到多个请求,或者是否有办法忽略这些标签生成的请求吗 如果您将过滤器映射到像@WebFil

我实现了一个过滤器,通过检查会话中的
@SessionScoped
bean来检查用户是否登录。然而,当我开始测试它时,我注意到每当我访问我的一个页面时,过滤器都会被多次调用

我发现我需要忽略AJAX请求,这减少了我的过滤器被调用的次数,但每次加载页面时触发的请求数量仍然不止一个

通过反复试验,我发现请求将由以下XHTML标记生成(均嵌入
标记中):


第二个标记是OmniFaces库的一部分

你知道为什么我会收到多个请求,或者是否有办法忽略这些标签生成的请求吗


如果您将过滤器映射到像
@WebFilter(“/*”
)这样的通用URL模式上,或者直接映射到像
@WebFilter(servletNames=“facesServlet”)
这样的faces servlet上,我们将不胜感激。

。您所指的请求只是来自(自动包含的)CSS/JS/image资源。如果您跟踪浏览器的内置HTTP流量监视器(按F12,网络)或在筛选器中调试请求URI,那么这应该很快变得清晰

至于覆盖JSF资源请求,如果出于某种原因,不可能将过滤器更改为侦听更具体的URL模式,如
@WebFilter(“/app/*”)
,那么您需要在请求URI上添加额外的检查。如果您使用的是OmniFaces,则可以使用来检入过滤器,以确定当前请求是JSF ajax请求还是JSF资源请求:

@WebFilter("/*")
public class YourFilter extends HttpFilter {

    @Override
    public void doFilter(HttpServletRequest request, HttpServletResponse response, HttpSession session, FilterChain chain) throws IOException, ServletException {
        if (Servlets.isFacesAjaxRequest(request) || Servlets.isFacesResourceRequest(request)) {
            chain.doFilter(request, response);
            return;
        }

        // ...
    }

}
另见:
  • (对于不使用OmniFaces的情况,包含一个“普通”Servlet示例)

非常感谢!检查请求是否为资源请求修复了该问题!
@WebFilter("/*")
public class YourFilter extends HttpFilter {

    @Override
    public void doFilter(HttpServletRequest request, HttpServletResponse response, HttpSession session, FilterChain chain) throws IOException, ServletException {
        if (Servlets.isFacesAjaxRequest(request) || Servlets.isFacesResourceRequest(request)) {
            chain.doFilter(request, response);
            return;
        }

        // ...
    }

}