2016-03-02 2 views
3

У меня возникла проблема с тем, что я использовал проверку ViewState в библиотеке JSF от OmniFaces: fixviewstate.js. Проблема в том, что мы столкнулись с странным поведением IE в нашем приложении, где после второго запроса AJAX на той же странице data.responseXML = {}. Странно, что responseText правильно установлен. И в этом случае viewState value = '-'. Такое значение затем отправляется на сервер, а JSF генерирует исключение IndexOutOfBoundsException.JSF ViewState fix IE responseXML

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

  • те сообщения просит
  • тип содержимого правильно установлен в текст/XML
  • Cache-Control: заголовок-кэша не является set

Не могли бы вы помочь?

ответ

4

Я, наконец, получил его работу. Это произошло, что, хотя реакция выглядит следующим образом:

<update id="javax.faces.ViewState"><![CDATA[-1644237968690251221:-7863929220167075939]]> 

update.firstChild.nodeValue на IE возвращает только часть текста - иногда только «-», иногда «-1644237968690251221». Все зависит от того, как браузер перерезает текст в текстовые узлы. И, согласно спецификации, он может это сделать любым способом. Так что нам просто нужно вызвать update.textContent.

+0

Nice find! Я буду исследовать совместимость браузера, а затем применить исправление в OmniFaces. Изменить: появляется [IE6-8] (https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent) не нравится, и вместо этого следует использовать 'innerText'. Можете ли вы подтвердить, что 'return updates [i] .textContent || updates [i] .innerText; 'отлично работает для вас через IE (эмулированные) версии? – BalusC

+0

Ну, обновления [i] .textContent || обновления [i] .text, похоже, работают. Но я просто пошел с версией jQuery $ (обновления [i]). Text(). – pshemu

Смежные вопросы