我想通过PPR更新页面的一部分。 这是我要更新的页面的一部分:
<h:panelGroup id="aggiungiAuto"
rendered="#{!autoBean.operazioneOk}">
<ui:include src="../component/aggiungi_auto.xhtml"/>
</h:panelGroup>
虽然这是aggiungi_auto.xhtml中的commandButton
<p:commandButton value="Submit"
update="growl aggiungiAuto aggiungiFoto"
actionListener="#{autoBean.insert}"/>
任何想法?
答案 0 :(得分:6)
JS / Ajax在客户端工作,而不是在服务器端工作。 JSF在服务器端工作,而不是在客户端。当您指示JSF不将组件呈现为HTML时,客户端中不会出现任何内容,因此JS / Ajax将无法找到要刷新/更新的HTML元素。
您需要将其包装在另一个<h:panelGroup>
。
<h:panelGroup id="aggiungiAuto">
<h:panelGroup rendered="#{!autoBean.operazioneOk}">
<ui:include src="../component/aggiungi_auto.xhtml"/>
</h:panelGroup>
</h:panelGroup>
这样<span id="aggiuniAuto">
始终总是存在于客户端,因此JS / Ajax将能够使用JSF生成的新HTML数据更新它。
答案 1 :(得分:0)
所以我在PrimeFaces上遇到了这样的问题(这次,以上答案还不够),我也找到了解决方法。
我认为部分问题是我递归使用ui:include
。无论出于何种原因,PrimeFaces都非理性地导致UI组件不同步地绑定到后端数据。例如,当点击“添加”按钮时,会在用户界面中创建一个新值,但随后该数据会从以下部分的值中提取出来,等等。
解释? “ [o]在一个有范围的bean中,将一个隐藏字段添加到表单中以保存回发数据[;]如果该字段未包含在进程中,则该bean将失去上下文。”此特定问题尤其在ui:include
递归中很普遍。 解决方案(均与p:commandButton
或其他可操作的组件有关):
update
和process
指向JSF组件,而不是常规HTML组件。update
,如果下一个作用域中断了(与绑定不同步)。styleClass
进行更新(而不是PF ID或@this:@parent
之类的东西),以便使用jQuery代替PF,例如:@(.fieldset-class)
。process
所更新的范围。 (这对于回发数据是必需的,以便Bean保持其更新上下文...)如果按钮是由过程值组件包含的,则此处不需要process="@this"
。immediate="true"
。ui:include
递归而导致的“添加”按钮发生),请设置process="@this"
,immediate="true"
和update="@none"
,然后oncomplete="remoteCommandName();"
,并使用p:remoteCommand
来代替上面提到的process
,immediate
和update
。ui:include
递归中又一层了)...将h:panelGroup
包裹在下一个{{1 }},然后更新按钮本身中的 PrimeFaces ID ,同时保持其c:forEach
调用,如上所示。remoteCommand
中:p:commandButton(s)
oncomplete="$('.FixButtonSC').click();"
中,其样式类为FieldsetSC:p:fieldset
希望有帮助...