Я думаю, что вам нужно понять, что касается JSF, это то, что клиент / серверные части компонентов тесно связаны друг с другом.Возможно, вам лучше думать о них строго как о едином объекте и забыть о том, чтобы возиться с одной стороной, возвращаясь к пользовательскому Javascript, когда это единственное оставшееся решение.серверная часть рендерит на стороне клиента, а не наоборот!Поэтому, когда вам нужно обновить компонент, сначала необходимо выполнить обновление на стороне сервера, которое будет распространяться на клиентскую часть (браузер).
В вашем примере правильный способ добавить элемент в select*
items - сохранить выбираемые элементы в структуре данных внутри компонента (вероятно, @ViewScoped
), а затем выполнить частичное обновление через AJAX для компонента select*
или его компонента-контейнера, когда на стороне сервера появляется возможностьузнайте об изменениях и сможете корректно обновлять клиентскую часть.
Конечно, вы можете взломать только Javascript, но тогда зачем использовать JSF?Весь смысл JSF состоит в том, чтобы избежать необходимости таких хаков.
Помните, что JSF - это не JSP, который по сути является макросом println для вывода html.JSF хранит представление компонентов страницы на стороне сервера, отражая представление браузера.
В демонстрации Primefaces приведены примеры того, как выполнять частичные обновления.Более конкретно это пример , который вы можете искать.Это доступно в стандартном JSF2, для JSF 1.2 вы должны использовать библиотеку компонентов, чтобы получить поддержку AJAX.