java.lang.NoSuchMethodError:FacesContext.getAttributes()Ljava/util/Map

java.lang.NoSuchMethodError:FacesContext.getAttributes()Ljava/util/Map,java,servlets,primefaces,jsf-2.2,servlet-filters,Java,Servlets,Primefaces,Jsf 2.2,Servlet Filters,我将这个简单的SessionFilter添加到我的项目中,但是每当执行chain.doFilter时,它就会抛出错误- java.lang.NoSuchMethodError:javax.faces.context.FacesContext.getAttributes()Ljava/util/Map SessionFilter.java public class SessionFilter implements Filter { public void doFilter(Servlet

我将这个简单的
SessionFilter
添加到我的项目中,但是每当执行
chain.doFilter
时,它就会抛出错误-

java.lang.NoSuchMethodError:javax.faces.context.FacesContext.getAttributes()Ljava/util/Map

SessionFilter.java

public class SessionFilter implements Filter {

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {

        if (!(req instanceof HttpServletRequest)) {
            chain.doFilter(req, res);
            return;
        }

        HttpServletResponse response = (HttpServletResponse) res;

        HttpServletResponseWrapper wrappedResponse = new HttpServletResponseWrapper(response) {
            @Override
            public String encodeRedirectUrl(String url) {
                return url;
            }

            @Override
            public String encodeRedirectURL(String url) {
                return url;
            }

            @Override
            public String encodeUrl(String url) {
                return url;
            }

            @Override
            public String encodeURL(String url) {
                return url;
            }
        };
        try {
            chain.doFilter(req, wrappedResponse); //Exception here
        } catch (Exception ex) {
            System.out.println(ex);
        }

    }

    public void destroy() {
    }

    public void init(FilterConfig arg0) throws ServletException {
    }
}
我的项目中有以下配置

  • 动态Web模块-3.0
  • Java-1.7
  • JavaServerFaces-2.2
  • PrimeFaces-5.0
  • Server-JBoss-7.0

我试图找到解决这个问题的办法,但没有得到任何帮助。由于这是我的第一个Java Faces项目,我真的没有任何想法来解决这个问题。有谁能给我指出正确的方向吗?

虽然您在类路径中添加了jsf-api-2.2.jar,但由于您使用JBoss-7.0作为容器,它本身就附带了jsf-api-1.2_13.jar。因此存在冲突,1.2版本从容器中获取首选项,并将首先加载。由于javax.faces.context.FacesContext.getAttributes()是从JSF2.0引入的,这就是引发异常的原因。用新罐子替换旧罐子可能对你有用。

对well Sharique有效。。非常感谢……)