我可以从JSF支持bean方法更新JSF组件吗?

有没有办法使JSF Backing bean导致页面上组件的更新? 我不希望使用更新属性的ajax组件更新页面上的组件。 我需要从JSF支持bean方法中触发更新。 请注意,在此方法完成之后或完成之前,页面上的更新可能会发生。 我正在使用PrimeFaces,如果有使用PrimeFaces的解决scheme。

使用标准的JSF API,将客户端ID添加到PartialViewContext#getRenderIds()

 FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("foo:bar"); 

使用PrimeFaces特定的API,使用RequestContext#update()

 RequestContext.getCurrentInstance().update("foo:bar"); 

如果碰巧使用JSF实用程序库OmniFaces ,请使用Ajax#update()

 Ajax.update("foo:bar"); 

无论如何,请注意,这些客户端ID应该表示绝对客户端ID, 而不是以NamingContainer分隔符字符作为前缀,就像从视图一样。

我也尝试从jsf backing bean / class更新组件

操作UI组件后,您需要执行以下操作:

 FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(componentToBeRerendered.getClientId()) 

使用clientId而不是(服务器端)componentId是很重要的!