是否可以从 JSF 支持 Bean 方法更新 JSF 组件?

2022-08-31 09:32:11

有没有办法让JSF支持bean导致页面上组件的更新?我不打算使用带有更新属性的ajax组件来更新页面上的组件。我需要从 JSF 支持 Bean 方法中触发更新。请注意,页面上的更新可能会在此方法完成后或完成之前发生。我正在使用PrimeFaces,如果有一个解决方案可以从使用PrimeFaces中获得。


答案 1

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

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

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

PrimeFaces.current().ajax().update("foo:bar");

或者,如果您还没有使用PrimeFaces 6.2 +,请使用RequestContext#update()

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

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

Ajax.update("foo:bar");

无论采用何种方式,请注意,这些客户端 ID 应表示绝对客户端 ID,这些 ID 以分隔符为前缀,就像从视图端所做的那样。NamingContainer


答案 2

我还尝试从jsf支持bean/类更新组件

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

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

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


推荐