我能否从 JSF 后备 Bean 方法更新 JSF 组件



有没有办法让 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 而不是(服务器端)组件 ID 很重要!!

RequestContext已从Primefaces 6.2弃用。在此版本中,请使用以下命令:

if (componentID != null && PrimeFaces.current().isAjaxRequest()) {
    PrimeFaces.current().ajax().update(componentID);
}

要从backbean执行javascript,请使用以下方式:

PrimeFaces.current().executeScript(jsCommand);

参考:

  • https://github.com/primefaces/primefaces/wiki/Migration-Guide
  • https://forum.primefaces.org/viewtopic.php?t=53129

只有有足够的时间研究:)一切才有可能

我必须做的就像让我迭代到 ui:repeat 并在输入中显示名称和其他字段的人一样。但是其中一个字段是单选 - A 并根据它的值更新另一个输入 - B。甚至 ui:重复没有我放的 id,它出现在 DOM 树中

<ui:repeat id="peopleRepeat"
value="#{myBean.people}"
var="person" varStatus="status">

比 html 中的 id 是这样的:

myForm:peopleRepeat:0:personType
myForm:peopleRepeat:1:personType

比在视图中,我得到了一种方法,例如:

<p:ajax event="change"
listener="#{myBean.onPersonTypeChange(person, status.index)}"/>

它的实现是在豆子中,如下所示:

String componentId = "myForm:peopleRepeat" + idx + "personType";
PrimeFaces.current().ajax().update(componentId);

因此,通过这种方式,我从 bean 更新了元素,没有任何问题。PF 版本 6.2

祝你好运,编码:)快乐

为了从支持 bean 更新组件,我们可以实现如下 RequestContext.getCurrentInstance().update('updatePanelGroup');

<h:panelGroup id="updatePanelGroup">
    .....
    ....
</h:panelGroup>

更新组件与原始面版本不同。

最新更新