我试图更新所选标签的内容,但似乎没有方法可行。
这就是我所拥有的:
<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>
The Line:
<p:poll interval="60" update=":tabsForm:tabs" oncomplete="doSomething()"/>
假设每隔60秒更新一个标签内的内容,问题是,它将始终选择update
之后的第一个标签。
我尝试单独更新标签,这样:
<p:poll interval="60" update=":tabsForm:tabs:version" oncomplete="doSomething()"/>
但我得到一个例外:
无法更新组件&#34; org.primefaces.component.tabview.Tab&#34; with id&#34; tabsForm:tabs:0:version&#34;没有附加的渲染器。 Expression&#34 ;: tabsForm:tabs:version&#34;引自&#34; tabsForm:tabs:0:j_idt14&#34;
我也尝试了很多其他方法,我在SO上找到的问题,但没有任何工作。 它会为我更新并选择第一个标签,或者根本不更新。
答案 0 :(得分:0)
我不认为你想把标签放在动态tabView中。这将为每个单独的选项卡创建一个轮询。相反,您希望使用一个轮询标记来更新选项卡。如果您可以更新所有选项卡并将焦点保持在当前选项卡上,那么只需..
<h:form id="tabsForm">
<p:tabView id="tabs"
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">
CONTENT GOES HERE (ALSO NEEDS TO BE UPDATED)
</p:tab>
</p:tabView>
<p:poll interval="60" listener="#{mainPage.updateComponent('tabsForm:tabs:version')}" oncomplete="doSomething();"/>
</h:form>
在javascript中
//if this is needed ***
function doSomething() {
$("#tabsForm\\:tabs ul li.ui-tabs-selected).click();
}
并在mainPage中:
public void updateComponent(String compId){
RequestContext.getCurrentInstance().update(compId);
}
我删除了&#34; dynamic = true&#34; (似乎会导致更多问题)。通过侦听器更新支持bean中的组件来消除错误消息。
更新单个标签更加困难,容易出现奇怪的行为。您可以尝试,但它似乎只有在tabIndex不为0时才有效。您将使用
捕获tabIndex onTabChange事件public void onTabChange(TabChangeEvent event) {
tabIndex = ((TabView) event.getSource()).getIndex();
}
//getter setter tabIndex
你的民意调查标签就像是
<p:poll interval="60" listener="#{mainPage.updateComponent('tabsForm:tabs:' += mainPage.tabIndex += ':version')}" oncomplete="doSomething();"/>
显然+ =仅适用于EL 3.0,您可以使用.concat。我的PF版本是6.0