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


100

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


可以触发验证错误:stackoverflow.com/a/14401741/1599699
Andrew

Answers:


183

使用标准的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分隔符,就像您从视图一侧开始那样。


6
看来我无法在“渲染响应”阶段(不幸的是,这是我被迫放置此代码的阶段)使其起作用的功能。如果我放置在“调用应用程序”或更早的阶段中,则一切正常。在“渲染响应”阶段是否有任何变通办法?
BestPractices 2012年

8
不,为时已晚。移动作业以调用操作阶段或在渲染响应阶段之前。调用由方法<f:ajax listener><f:event type="preRenderView" listener>
BalusC

关于如何使用JSF 1.2做到这一点的任何想法?如果答案太长/太复杂,我可以问一个新问题。
RinaldoPJr 2012年

@RinaldoPJr:JSF 1.2没有的概念<f:ajax>。这是从JSF 2.0开始引入的。您需要诉诸于JSF 1.2组件库特定的功能。
BalusC 2012年

@DanielK:不知道。我不做特立尼达。如果仍然不知道特立尼达的方式,只需使用标准的JSF API方法。
BalusC 2015年

9

我也尝试从jsf支持bean / class更新组件

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

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

使用clientId代替(服务器端)componentId很重要!!



1

只有有足够的时间进行研究,一切皆有可能:)

我要做的就像让人们迭代到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

祝你好运,编码愉快:)


如果您在上具有ajax更改事件personType,那么将人员和索引都传递给ajax侦听器是多余的。您可以从事件中获取ID和值。但是您的解决方案可能是您特定用例所需要的解决方案,但是由于没有完整的示例(以最小的可重现性示例风味),因此很难说出来。
库克尔杰(Kukeltje)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.