是否有一种方式让JSF后备bean更新页面上的组件? 我不想使用具有更新属性的ajax组件来更新页面上的组件。 我需要从JSF后台bean方法中触发更新。 请注意,页面上的更新可以在此方法完成之后或之前发生。 如果可以从PrimeFaces使用解决方案,则我正在使用PrimeFaces。
是否有一种方式让JSF后备bean更新页面上的组件? 我不想使用具有更新属性的ajax组件来更新页面上的组件。 我需要从JSF后台bean方法中触发更新。 请注意,页面上的更新可以在此方法完成之后或之前发生。 如果可以从PrimeFaces使用解决方案,则我正在使用PrimeFaces。
PartialViewContext#getRenderIds()
中。FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("foo:bar");
PrimeFaces.Ajax#update()
。PrimeFaces.current().ajax().update("foo:bar");
RequestContext#update()
。RequestContext.getCurrentInstance().update("foo:bar");
Ajax#update()
。Ajax.update("foo:bar");
NamingContainer
分隔符字符的相对客户端ID。<f:ajax listener>
或 <f:event type="preRenderView" listener>
调用方法。 - BalusC我也尝试从一个JSF后台bean/class更新一个组件
在操作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);
}
要从后端执行Javascript,请使用以下方法:
PrimeFaces.current().executeScript(jsCommand);
只要有足够的时间进行研究,一切都是可能的 :)
我的任务类似于将人们迭代到ui:repeat中,并在输入框中显示名称和其他字段。但其中一个字段是singleSelect - A,根据它的值更新另一个输入框 - B。即使ui:repeat没有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)}"/>
实现方式是在bean中进行:
String componentId = "myForm:peopleRepeat" + idx + "personType";
PrimeFaces.current().ajax().update(componentId);
所以我通过这种方式无误地从bean中更新了元素。PF版本6.2
祝好运并愉快编码 :)
personType
上有 ajax 更改事件,那么将人员和索引都传递给 ajax 监听器是多余的。您可以从事件中获取 id 和值。但是,您的解决方案可能是特定用例所需的,但由于没有完整的示例(以 [mcve] 格式),因此很难确定。 - KukeltjeRequestContext.getCurrentInstance().update('updatePanelGroup');
<h:panelGroup id="updatePanelGroup">
.....
....
</h:panelGroup>
更新组件与原始版本不同。