MyFaces Orchestra?conversationContext=x
为页面上的每个资源添加一个。由于我没有将会话范围用于项目的公共部分(仅用于管理部分),我想摆脱该参数有两个原因:
- 它打破了静态资源的浏览器缓存
- 它很丑 :)
我现在要看看 Orchestra 的源代码,也许会绕过一些东西,但最好是有一个我不知道的选项
这个问题的答案很简单,同时也是一种解决方法。MyFaces 管弦乐队使用原始文件的包装器来对参数HttpServletResponse
进行编码。contesationContext
使用 Orchestra 有两种选择 - 使用拦截器 (JSF) 和Filter
. 如果响应尚未包装,他们俩都会尝试包装响应。因此,如果同时使用了 OrchestraFilter
和拦截器,则最Filter
触发,包装响应对象,并在请求中设置一个属性,向拦截器指示它不应该再次包装响应。
如果要添加,Filter
可以将其配置为匹配特定的 URL 模式。conversationContext
但是,对于我的需要,那个模式匹配器太简单了,所以我自己做了一个过滤器。所以为了告诉拦截器不要包装响应,所有要做的就是:
httpRequest.setAttribute(
RequestParameterServletFilter.REQUEST_PARAM_FILTER_CALLED,
Boolean.TRUE);