Могу ли я обновить компонент JSF из метода поддержки bean JSF-поддержки?
Есть ли способ заставить JSF Backing bean вызвать обновление компонента на странице? Я не хочу использовать компонент ajax с атрибутом обновления для обновления компонента на странице. Мне нужно вызвать обновление из JSF-поддержки bean. Обратите внимание, что обновление на странице может произойти после завершения этого метода или до его завершения. Я использую PrimeFaces, если есть решение, которое можно использовать при использовании PrimeFaces.
Ответы
Ответ 1
Используя стандартный JSF API, добавьте идентификатор клиента в PartialViewContext#getRenderIds()
.
FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("foo:bar");
Используя специфический API PrimeFaces, используйте RequestContext#update()
.
RequestContext.getCurrentInstance().update("foo:bar");
Начиная с PrimeFaces 6.2, RequestContext#update()
устарела, вместо этого используйте PrimeFaces::Ajax#update
.
PrimeFaces.current().ajax().update("foo:bar");
Если вы используете библиотеку утилит JSF OmniFaces, используйте Ajax#update()
.
Ajax.update("foo:bar");
Независимо от способа, обратите внимание, что эти идентификаторы клиента должны представлять абсолютные идентификаторы клиента, которые не имеют префикса с NamingContainer
разделителем NamingContainer
как вы делали бы со стороны представления.
Ответ 2
Я также попытался обновить компонент из поддержки jsf bean/class
После манипулирования компонентом пользовательского интерфейса вам необходимо выполнить следующие действия:
FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(componentToBeRerendered.getClientId())
Важно использовать clientId вместо (server-side) componentId!!
Ответ 3
RequestContext
устарел от Primefaces 6.2. Из этой версии используйте следующее:
if (componentID != null && PrimeFaces.current().isAjaxRequest()) {
PrimeFaces.current().ajax().update(componentID);
}
И чтобы выполнить javascript из бэкана, используйте этот способ:
PrimeFaces.current().executeScript(jsCommand);
Ссылка: