是否可以从 JSF 支持 Bean 方法更新 JSF 组件?
2022-08-31 09:32:11
有没有办法让JSF支持bean导致页面上组件的更新?我不打算使用带有更新属性的ajax组件来更新页面上的组件。我需要从 JSF 支持 Bean 方法中触发更新。请注意,页面上的更新可能会在此方法完成后或完成之前发生。我正在使用PrimeFaces,如果有一个解决方案可以从使用PrimeFaces中获得。
有没有办法让JSF支持bean导致页面上组件的更新?我不打算使用带有更新属性的ajax组件来更新页面上的组件。我需要从 JSF 支持 Bean 方法中触发更新。请注意,页面上的更新可能会在此方法完成后或完成之前发生。我正在使用PrimeFaces,如果有一个解决方案可以从使用PrimeFaces中获得。
使用标准 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
我还尝试从jsf支持bean/类更新组件
操作 UI 组件后,您需要执行以下操作:
FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(componentToBeRerendered.getClientId())
使用 clientId 而不是(服务器端)componentId 非常重要!!