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

新手上路,请多包涵

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

原文由 BestPractices 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 448
2 个回答

使用标准 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,它们 没有 前缀 NamingContainer 分隔符,就像您从视图端所做的那样。

原文由 BalusC 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

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

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

原文由 Frithjof Schaefer 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题