Как работают PrimeFaces Selectors как в update = “@ (. MyClass)”?
Я не понимаю, как работают селекторы PrimeFaces ( PFS ).
Я могу использовать его. И я думаю, что это фантастический инструмент, хотя он не работает всегда для меня. .myClass
– это селектор jQuery на стороне клиента. Как JSF на стороне сервера знает, что нужно обновлять?
Я могу понять, как работают обычные селекторы идентификаторов JSF .
- Как реализовать динамический список с составным компонентом JSF 2.0?
- Экспорт в Excel JSF и PrimeFaces
- Как включить другой XHTML в XHTML с помощью JSF 2.0 Facelets?
- Тайм-аут сеанса и обработка ViewExpiredException в JSF / PrimeFaces ajax request
- Зачем нужно вставлять компонент с rendered = "# {some}" в другой компонент, когда я хочу ajax-обновить его?
textId
ссылается на идентификатор компонента в дереве компонентов, как определено в файле XHTML на стороне сервера. Поэтому я могу понять, как JSF находит правильный компонент.
Но если вы используете селектора селекторов, используются селектора jQuery на стороне клиента. Как JSF знает, какой компонент должен быть обновлен? Иногда у меня проблемы с PFS. Кажется, он не работает всегда для меня. Есть ли что-то, что вы должны иметь в виду, если используете PFS?
- Каково использование faces-config.xml в JSF 2?
- Получить текущую страницу программно
- Отображение динамического изображения из базы данных с помощью p: graphicImage и StreamedContent
- Связывание компонента JSF без свойства bean
- Проверка бонуса @NotNull, @NotBlank и @NotEmpty не работают в JSF + Tomcat
- Как вызвать JSF-бэк-метод только в том случае, когда onclick / oncomplete / on ... происходит событие, а не на загрузке страницы
- JSF Просмотр области в Spring
- h: commandButton / h: commandLink не работает при первом щелчке, работает только при втором щелчке
Вы, наверное, уже знаете, что PrimeFaces использует jQuery под обложками. Серии PrimeFaces основаны на jQuery. Все, что вы указываете в @(...)
будет использоваться как селектор jQuery в текущем дереве HTML DOM. Для любого найденного HTML-элемента, который имеет идентификатор, именно этот идентификатор в конечном итоге будет использоваться в update
.
В основном, для update="@(.myclass)"
, PrimeFaces будет под крышкой примерно сделать это:
var $elements = $(".myclass"); var clientIds = []; $.each($elements, function(index, element) { if (element.id) { clientIds.push(":" + element.id); } }); var newUpdate = clientIds.join(" "); // This will be used as `update` instead.
Таким образом, в случае, например,
обновление этой командной кнопки
будет в конечном итоге с тем же эффектом, что и
Обратите внимание, что это также работает для автогенерированных идентификаторов. Т.е.
не является обязательным.
Иногда у меня проблемы с PFS. Есть ли что-то, что вы должны иметь в виду, если вы используете PFS?
Может случиться так, что вы выбрали «слишком много» (например, @(form)
не выбирает текущую форму, а все формы, точно так же, как $("form")
в jQuery!) Или что вы фактически ничего не выбрали (когда желаемый Элемент HTML DOM на самом деле не имеет идентификатора). Изучение идентификаторов элементов в дереве HTML DOM и полезной нагрузке запроса в мониторе трафика HTTP должно дать подсказки.
Требуемые элементы в дереве HTML DOM должны иметь (автогенерированный) идентификатор. javax.faces.partial.render
запроса javax.faces.partial.render
в мониторе трафика HTTP должен содержать правильные идентификаторы клиентов. Атрибут rendered
элемента в дереве компонентов JSF должен оценивать значение true
во время обновления. Etcetera.
В вашем конкретном примере
не будет
в сгенерированном выходном HTML с любым ID. Назначение этого id
должно решить вашу проблему с его обновлением.
Итак, этот пример не будет работать
но этот пример будет работать (обратите внимание, что присвоение формы ID не требуется):