Мы столкнулись с той же проблемой в IceFaces 1.8.2. Проблема в том, что приложение на стороне сервера не знает об изменениях на стороне клиента в DOM. Мы решили это за нас, применив классы маркеров к элементам, которыми мы хотели манипулировать с помощью jQuery. Мы использовали общий обратный вызов на стороне клиента для DOM-Updates (onAsynchronousReceive
под IceFaces 1.8.x), чтобы повторно применить наш скрипт.
К сожалению, не относится к RichFaces:
<h:outputText value="my text" styleClass="doSomethingWithThisAfterDOMUpdate" />
И где-то в разметке вашей страницы (мы используем jQuery, привязанный к j вместо $):
<script type="text/javascript">
// do somehting the first time
j(".doSomethingWithThisAfterDOMUpdate").css('display', 'none');
Ice.onAsynchronousReceive("document:body", function() {
// do it again after each asynchronous receive
j(".doSomethingWithThisAfterDOMUpdate").css('display', 'none');
});
</script>
НО : будьте осторожны, применяя слушателей к элементам в обратном вызове. Если элемент не заменяется, вы назначаете тем же слушателям второй, третий, четвертый раз ...
Под JSF2 AJAX стал частью спецификации. Вы могли бы взглянуть на метод на стороне клиента addOnEvent , который может быть общей частью счетчика Ice.onAsynchronousReceive.
Тем не менее, не все компоненты инфраструктуры, по-видимому, используют реализацию спецификации на стороне клиента для выполнения своих обновлений DOM (т.е. PrimeFaces).
Но я думаю, что принцип становится ясным. Вам нужно перезапустить сценарий после замены элемента DOM:)