【发布时间】:2017-05-15 15:50:41
【问题描述】:
我正在尝试更新选定选项卡的内容,但似乎没有任何方法有效。
我有这种东西:
<h:form id="tabsForm">
<p:tabView id="tabs"
dynamic="true"
cache="false"
value="#{mainPage.versions}"
var="version"
scrollable="true">
<p:ajax event="tabChange" listener="#{mainPage.onTabChange}" />
<p:ajax event="tabClose" listener="#{mainPage.onTabClose}" />
<p:tab id="version" title="#{version.value}" closable="true">
<p:poll interval="5" update=":tabsForm:tabs" oncomplete="doSomething()"/>
CONTENT GOES HERE (ALSO NEEDS TO BE UPDATED)
</p:tab>
</p:tabView>
</h:form>
线:
<p:poll interval="60" update=":tabsForm:tabs" oncomplete="doSomething()"/>
假设每 60 秒更新每个选项卡内的内容,问题是,它总是会选择update 之后的第一个选项卡。
我尝试通过这种方式单独更新标签:
<p:poll interval="60" update=":tabsForm:tabs:version" oncomplete="doSomething()"/>
但我得到一个例外:
在没有附加渲染器的情况下,无法更新 ID 为“tabsForm:tabs:0:version”的组件“org.primefaces.component.tabview.Tab”。从“tabsForm:tabs:0:j_idt14”引用的表达式“:tabsForm:tabs:version”
我还从我在 SO 上找到的问题中尝试了很多其他方法,但没有任何效果。 它要么更新并为我选择第一个选项卡,要么根本不更新。
【问题讨论】:
-
您是否尝试将要更新的内容包装在
ui:fragment中,给它一个 id 并更新它?如果不是,为什么不呢?如果你做了什么问题? -
如果您需要在更新所有选项卡后保持所选选项卡处于打开状态,Stackoverflow 中至少有两个类似的问题:google.com/…
-
update="version"不能解决您的问题吗? -
@TheBitman:那也行不通...
p:tab没有渲染器,因此无法更新。您很可能会遇到与问题相同的错误。 -
正如@kukeltje 所说:选项卡组件没有渲染器,因此您应该将 activeIndex 绑定到 bean 属性以在 tabview 更新时显示正确的选项卡
标签: ajax jsf primefaces