Java 移除MyFaces和#x27;s";会话语境;从静态资源(css、图像)获取参数

Java 移除MyFaces和#x27;s";会话语境;从静态资源(css、图像)获取参数,java,jsf,myfaces,orchestra,Java,Jsf,Myfaces,Orchestra,MyFaces Orchestration向页面上的每个资源添加一个?conversationContext=x。由于我没有将对话范围用于项目的公共部分(仅用于管理部分),因此出于两个原因,我想去掉该参数: 它破坏了静态资源的浏览器缓存 很难看:) 我现在要看一看交响乐团的源代码,也许可以略过一些东西,但最好是有一个我不知道的选项,这个问题的答案很简单,同时有一点变通方法。 MyFaces Orchestration在原始HttpServletResponse周围使用一个包装器,以便对con

MyFaces Orchestration向页面上的每个资源添加一个
?conversationContext=x
。由于我没有将对话范围用于项目的公共部分(仅用于管理部分),因此出于两个原因,我想去掉该参数:

  • 它破坏了静态资源的浏览器缓存
  • 很难看:)

我现在要看一看交响乐团的源代码,也许可以略过一些东西,但最好是有一个我不知道的选项,这个问题的答案很简单,同时有一点变通方法。 MyFaces Orchestration在原始
HttpServletResponse
周围使用一个包装器,以便对
contesationContext
参数进行编码

使用Orchestra有两种选择——一种是拦截器(JSF),另一种是过滤器。 如果响应尚未包装,它们都会尝试包装响应。因此,如果同时使用了orchestra
Filter
和interceptor,那么
Filter
将首先启动,包装响应对象,并在请求中设置一个属性,该属性向interceptor指示它不应再次包装响应

如果要添加
conversationContext
,则可以将
过滤器配置为匹配特定的URL模式。然而,出于我的需要,模式匹配器太简单了,所以我制作了自己的过滤器。因此,为了告诉拦截器不要包装响应,必须做的是:

httpRequest.setAttribute(
                RequestParameterServletFilter.REQUEST_PARAM_FILTER_CALLED,
                Boolean.TRUE);

我正在尝试实施你的解决方案。我已经在web.xml中声明了我自己的过滤器,并且正确地调用了它。然而,当过滤器被调用时,
conversationContext
似乎已经被其他类应用于请求。我不知道是哪门课。你是怎么解决的?我是三年前解决的。事情可能已经改变了。我可以这样解决: