Использование RichFaces 3.3.3, JSF 1.2 и Facelets.
В некоторых презентационных целях мне нужно обернуть содержимое некоторых элементов div в другие элементы div, чтобы иметь возможность стилизовать их определенным образом.
Я использую jQUery, чтобы сделать его более чистым при написании HTML, и им можно управлять в одном месте, в противном случае мне приходится жестко кодировать дополнительные divs
в каждом месте, где я хочу их использовать.
например. исходный HTML-код, сгенерированный JSF
<div id="j_id4:main-container">
<div id="j_id4:j_id5:nav">...</div>
</div>
после использования jQUery HTML-код теперь выглядит следующим образом:
<div id="j_id4:main-container">
<div class="top"><div></div></div>
<div class="middle">
<div id="j_id4:j_id5:nav">...</div>
</div>
<div class="bottom"><div></div></div>
</div>
Может ли это вызвать проблемы? Я иду против этого правила из документации jboss richfaces, которая гласит:
Любой Ajax-фреймворк не должен добавляться
или удалить, но только заменить элементы
на странице. Для успешных обновлений,
элемент с таким же идентификатором, как в
ответ должен существовать на странице. Если
Вы хотели бы добавить любой код к
страницы, поместите в качестве заполнителя (любой
пустой элемент). По той же причине,
рекомендуется размещать сообщения в
компонент "AjaxOutput" (как нет
сообщения это тоже сообщение).
Если я не могу этого сделать, какой другой подход вы бы предложили?
ОБНОВЛЕНИЕ 1:
Я попробовал это на странице, которая имеет элемент управления rich: tabPanel, установленный в режим ajax, я сделал первое (по умолчанию) одно из содержимого вкладки, чтобы получить готовые вложенные div на dom через jQuery. в первый раз все работает нормально, но когда я нажимаю на другие вкладки и возвращаюсь к первой, лишние элементы div не отображаются. Я думаю, это потому, что JS запускается только один раз в готовом состоянии, а затем при перерисовке richfaces элемента управления tabPanel он перерисовывается, как будто он не знал о дополнительных div. Есть ли способ избежать этого?