Как работают PrimeFaces Selectors как в update = “@ (. MyClass)”?

Я не понимаю, как работают селекторы PrimeFaces ( PFS ).

 

Я могу использовать его. И я думаю, что это фантастический инструмент, хотя он не работает всегда для меня. .myClass – это селектор jQuery на стороне клиента. Как JSF на стороне сервера знает, что нужно обновлять?

Я могу понять, как работают обычные селекторы идентификаторов JSF .

  

textId ссылается на идентификатор компонента в дереве компонентов, как определено в файле XHTML на стороне сервера. Поэтому я могу понять, как JSF находит правильный компонент.

Но если вы используете селектора селекторов, используются селектора jQuery на стороне клиента. Как JSF знает, какой компонент должен быть обновлен? Иногда у меня проблемы с PFS. Кажется, он не работает всегда для меня. Есть ли что-то, что вы должны иметь в виду, если используете PFS?

Вы, наверное, уже знаете, что 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 не требуется):

     
  • h: commandButton не работает внутри h: dataTable
  • Компонент формы должен иметь UIForm в своей родословной. Предложение: заключить необходимые компоненты в
  • Какой URL-адрес использовать для связи / перехода на другие страницы JSF
  • Использование в списке не обновляет значения модели
  • java.lang.IllegalStateException: Не удалось найти резервную копию для фабрики javax.faces.application.ApplicationFactory
  • Как использовать PrimeFaces p: fileUpload? Метод прослушивателя никогда не вызывается или UploadedFile имеет значение null / выбрасывает ошибку / не используется
  • Могу ли я обновить JSF-компонент из метода боковых компонентов JSF?
  • Как добавить сообщения Faces во время @PostConstruct
  • Конфликты JQuery с файлами?
  • JSF не поддерживает проверку кросс-поля, есть ли обходной путь?
  • JSF-запрос, привязанный к bean-компоненту, продолжает воссоздавать новые сессионные компоненты Stateful по каждому запросу?
  • Давайте будем гением компьютера.