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

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

我将这个简单的 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 {
    }
}

我的项目中有以下配置。

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

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