Могу ли я использовать FixViewState.js из omnifaces с richfaces' a4j:ajax (RF4+JSF2.2/mojarra)
Я использую обходной путь исправления omnifaces 1.7 FixViewState для решения следующей проблемы: viewstate и ViewScope теряются при ajax render = "@ form". Обходной путь, кажется, работает хорошо с f: ajax, но не с a4j: ajax (richfaces).
Предполагается ли исправление работать с richfaces из коробки? (версия richfaces - 4.3.5)
возможно связанная проблема, зарегистрированная a4j:log:
error[15:09:31.667]: [status=200] During update: javax.faces.ViewState not found
Спасибо!
2 ответа
Tl;dnr: Richfaces-4.x не работает с JSF-2.2
Длинная версия:
Что касается информации из комментариев и из личного опыта: это известная ошибка в Richfaces-4.x в сочетании с Mojarra-2.2.x. См. RF-13317 для деталей.
Суть в том, что JSF-2.2 изменился на спецификации для ViewState
скрытое поле ввода и RichFaces не поспевают (оно нацелено на JSF-2.1, так что все в порядке). Он по-прежнему отображает идентификатор состояния представления JSF-2.1, который сбивает с толку Javascript, включенный в Mojarra-2.2.x, в том смысле, что он теперь пытается найти элемент, который имеет идентификатор состояния представления JSF-2.1, но не находит ни одного. Это делает каждый вызов ajax с RichFaces номинальным сбоем, хотя и неразрушающим образом.
Лично я использую довольно некрасивую уловку, чтобы сделать вышеупомянутый проход:
<o:onloadScript>
jQuery('#viewStateContainer').html('<span id="javax.faces.ViewState"></span>');
</o:onloadScript>
<span id="viewStateContainer" style="display:none;"></span>
Это предоставляет RichFaces поддельный элемент для помещения состояния просмотра (уничтожая его в процессе, поэтому его необходимо воссоздать onloadScript
).
Это, кажется, решает мои проблемы, но довольно запутанно. Так что не стесняйтесь комментировать / спрашивать об этом.
Извините, у меня недостаточно репутации, чтобы комментировать выбранный ответ, но, похоже, это исправлено начиная с Richfaces 4.5.0 (см. Проблему с бэкпортом).