conversationContext
適切なブラウザー キャッシュを提供するために、Apache MyFaces Orchestra が css ファイルへの要求に対してすべての要求に追加するパラメーターを削除したいと考えています。
Bozhoが示唆したように、Orchestrator が探している属性を設定するフィルターを実装しました。
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 サイトのリクエストにも含まれていないことを意味します (ただし、含まれている必要があります)。
conversation context
jsf サイトの生成された html 内の css ファイルへのリンクにも属性が含まれているか、フィルターの実装に依存していないことに気付きました。この理由で、2 番目のリクエストにはすでにconversation context
パラメータが含まれていると思いますか?
conversation context
属性が設定されていないリクエストだけでなく、Orchestrator がすべてのリクエストにパラメーターを追加する理由がわかりません。
正しく機能するようにフィルターを実装するにはどうすればよいですか?