Мы столкнулись с той же проблемой в IceFaces 1.8.2. Проблема в том, что приложение на стороне сервера не знает о ваших изменениях в DOM на стороне клиента. Мы решили эту проблему за нас, применив классы маркеров к элементам, которыми мы хотели манипулировать с помощью jQuery. Мы использовали общий обратный вызов на стороне клиента для обновлений DOM (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 :)
person
Tim Brückner
schedule
19.01.2012