Answers:
使用标准的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
分隔符,就像您从视图一侧开始那样。
<f:ajax listener>
或<f:event type="preRenderView" listener>
<f:ajax>
。这是从JSF 2.0开始引入的。您需要诉诸于JSF 1.2组件库特定的功能。
将RequestContext
被弃用从Primefaces 6.2。在此版本中,使用以下命令:
if (componentID != null && PrimeFaces.current().isAjaxRequest()) {
PrimeFaces.current().ajax().update(componentID);
}
要从backbean 执行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侦听器是多余的。您可以从事件中获取ID和值。但是您的解决方案可能是您特定用例所需要的解决方案,但是由于没有完整的示例(以最小的可重现性示例风味),因此很难说出来。