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

时间:2017-03-15 09:38:44

标签: java servlets primefaces jsf-2.2 servlet-filters

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

  

java.lang.NoSuchMethodError:javax.faces.context.FacesContext.getAttributes()Ljava / util的/地图;

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 {
    }
}

我的项目中有以下配置。

  • 动态网络模块 - 3.0
  • Java - 1.7
  • JavaServer Faces - 2.2
  • PrimeFaces - 5.0
  • 服务器 - JBoss - 7.0

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

1 个答案:

答案 0 :(得分:1)

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