MyFaces Orchestra为页面上的每个资源添加?conversationContext=x
。由于我没有将对话范围用于我项目的公共部分(仅适用于管理部分),我想摆脱该参数有两个原因:
我现在要看一下Orchestra的源代码,也许会绕过一些东西,但如果有一个选项我最好不知道
答案 0 :(得分:1)
这个问题的答案很简单,同时还有一些解决方法。
MyFaces管弦乐队使用原始HttpServletResponse
周围的包装器来编码contesationContext
参数。
使用Orchestra有两种选择 - 使用拦截器(JSF)和Filter
。
他们两个都尝试包装响应,如果它还没有被包装。因此,如果同时使用了管道Filter
和拦截器,Filter
会被激活,包装响应对象,并在请求中设置一个属性,它向拦截器指示它不应该包裹再次回应。
如果要添加Filter
,可以将conversationContext
配置为匹配某个网址格式。但是,根据我的需要,该模式匹配器过于简单,所以我改为使用自己的过滤器。因此,为了告诉拦截器不要包装响应,所有必须做的就是:
httpRequest.setAttribute(
RequestParameterServletFilter.REQUEST_PARAM_FILTER_CALLED,
Boolean.TRUE);