是否可以更新我的页面中不是JSF组件的部分?
例如,我可以更新纯HTML <div>
还是需要将其包装在JSF组件中?
答案 0 :(得分:24)
是否可以更新我的页面中不是JSF组件的部分?
没有。要更新的组件必须由UIViewRoot#findComponent()
提供,以便JSF可以找到它们,在其上调用encodeAll()
,捕获生成的HTML输出并将其传回ajax响应中,以便JavaScript可以用它更新HTML DOM树。纯HTML元素在JSF组件树中没有表示为真实的UIComponent
实例,因此JSF已经无法在第一时间找到它们。
例如,我可以更新纯HTML
<div>
还是需要将其包装在JSF组件中?
您需要将其包装在像<h:panelGroup>
这样的JSF组件中。但是,您可以使用<h:panelGroup layout="block">
来表示JSF中的真实<div>
。这样您就不需要将<div>
包装在另一个JSF组件中。
<h:panelGroup layout="block" id="foo">
...
</h:panelGroup>
从JSF 2.2开始,您可以使用带有jsf:id
属性的新passthrough elements功能将HTML(5)元素声明为JSF组件。
<... xmlns:jsf="http://xmlns.jcp.org/jsf">
<div jsf:id="foo">
...
</div>
<main jsf:id="bar">
...
</main>
<section jsf:id="baz">
...
</section>
他们将按原样呈现他们的输出,但在封面下是一个具体的UIPanel
实例。
composite components的情况下有一个角落案例。您可以使用以下方法来获取ajax可以更新 的HTML元素。
<cc:implementation>
<span id="#{cc.clientId}">
...
</span>
</cc:implementation>
此方法有效的解释是因为即使复合组件不将自身呈现为HTML输出, 本身也可由UIViewRoot#findComponent()
提供
答案 1 :(得分:1)
好像你不能。
更新某些内容将其包装在'可更新'组件中(在primeaces p:outputpanel中)并更新该组件。
添加:在您的特殊情况下,您可以刷新p:树的子项:JSF update primefaces tree children
(哈哈总是想以第三人称与我交谈)
答案 2 :(得分:-2)
AFAIK您可以通过ID更新组件,并且由于常规元素可以有ID,因此只要您获得ID正确就可以; - )