为了提供正确的浏览器缓存,我想去掉conversationContext
Apache MyFaces Orchestra 添加到每个请求的参数,用于对 css 文件的请求。
正如Bozho建议的那样,我已经实现了一个过滤器来设置 Orchestra 正在寻找的属性。
public class ResourceFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse theResponse, FilterChain theChain) throws IOException, ServletException {
if(shouldNotAppendConversation(request)) {
request.setAttribute(RequestParameterServletFilter.REQUEST_PARAM_FILTER_CALLED, Boolean.TRUE);
}
theChain.doFilter(request, theResponse);
}
private boolean shouldNotAppendConversation(ServletRequest theRequest) {
HttpServletRequest aRequest = (HttpServletRequest) theRequest;
String aPath = aRequest.getRequestURI();
if(aPath.endsWith(".css.jsf")) {
return true;
}
return false;
}
@Override
public void init(FilterConfig theFilterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
这不起作用,参数仍然附加到每个请求。在调试时,我发现过滤器首先受到对 jsf 站点的请求的影响。当然,我想conversation context
在该请求中包含 ,因此过滤器将请求直接转发到链中的下一个过滤器。命中过滤器的下一个请求(通常是对 css 文件的请求)已经conversation context
包含在请求中。
奇怪的是,如果我将过滤器修改为始终设置属性,则所有请求都不会具有该conversation context
属性。但这意味着,conversation context
jsf 站点的请求中也不包含(但应该)。
我注意到 jsf 站点生成的 html 中指向 css 文件的链接也包含该conversation context
属性或不包含该属性,具体取决于过滤器实现。我猜出于这个原因,第二个请求已经包含了conversation context
参数?
我不明白为什么 Orchestra 将conversation context
参数附加到每个请求,而不仅仅是未设置属性的请求。
如何实现过滤器以正常工作?