2009-12-10 1 views
4

MyFaces Orchestra добавляет ?conversationContext=x к каждому ресурсу на странице. Так как я не использую рамки разговора для публичной части моего проекта (только для администратора части), я хотел бы избавиться от этого параметра по двум причинам:Удаление MyEaces Параметр «talkContext» оркестра «GET» из статических ресурсов (css, images)

  • он ломает кэширование окна браузера, статические ресурсы
  • это некрасиво :)

Я теперь собираюсь смотреть на исходном коде оркестра, и, возможно, перепускной что-то, но было бы лучше, если есть возможность для этого я не имеет значения

ответ

1

Ответ на этот вопрос прост и в то же время бит обходного пути. MyFaces оркестр использует обертку вокруг оригинала HttpServletResponse, чтобы кодировать параметр contesationContext.

Существует два варианта использования оркестра - с перехватчиком (JSF) и Filter. Оба они пытаются обернуть ответ, , если он еще не обернут. Поэтому, если используются как оркестр Filter, так и перехватчик, Filter является самым жарким, обертывает объект ответа и устанавливает атрибут в запросе, который указывает перехватчику, что он не должен снова завершать ответ.

Filter может быть настроен на соответствие определенному шаблону URL, если необходимо добавить conversationContext. Однако для моих нужд этот шаблонный шаблон был слишком простым, поэтому вместо этого я сделал свой собственный фильтр. Поэтому, чтобы сообщить перехватчику НЕ обернуть ответ, все, что нужно сделать, это следующее:

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

Я пытаюсь реализовать ваше решение. Я объявил свой собственный фильтр в файле web.xml и получил правильное имя. Однако кажется, что когда фильтр вызывается, «chatContext» уже применяется к запросу другим классом. Я не знаю, какой класс. Как вы это решили? – flash

+0

У меня есть, 3 года назад. Вещи, вероятно, изменились. – Bozho