我将这个简单的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 {
}
}
我的项目中有以下配置。
我尝试为此找到任何解决方案,但我无法得到任何帮助。由于这是我的第一个Java Faces项目,我真的没有任何想法来解决这个问题。有谁能指出我正确的方向?
答案 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(),因此抛出该异常。用新的罐子替换旧罐子可能对你有用。