2017-05-15 120 views
0

我試圖更新選定選項卡的內容,但似乎沒有任何方法可行。無法更新p:標籤內容

這種我有什麼:

<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()"/>

但我得到一個異常:

Can not update component "org.primefaces.component.tabview.Tab" with id "tabsForm:tabs:0:version" without a attached renderer. Expression ":tabsForm:tabs:version" referenced from "tabsForm:tabs:0:j_idt14"

我也嘗試了很多其他的方法,從我發現這裏的問題在SO上,但沒有任何工作。 它會更新併爲我選擇第一個標籤,或根本不會更新。

+0

你是否嘗試在ui:fragment中包裝更新的內容,給這個id並更新它?如果不是,爲什麼不呢?如果你做了什麼問題? – Kukeltje

+0

如果您需要在所有選項卡更新後保持選定選項卡打開,那麼在Stackoverflow中至少有兩個類似的問題:https://www.google.com/search?q=primefaces+keep+selected + tab + open + stackoverflow – Kukeltje

+0

'update =「version」'沒有解決你的問題嗎? –

回答

0

我不認爲你想把標籤放在動態tabView中。這將爲每個標籤創建一個輪詢。相反,您希望使用一個輪詢標籤來更新選項卡。如果你是更新所有選項卡和當前選項卡中保持專注然後就OK ..在JavaScript

//if this is needed *** 
function doSomething() { 
    $("#tabsForm\\:tabs ul li.ui-tabs-selected).click(); 
} 

<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> 

和炫魅:

public void updateComponent(String compId){ 
    RequestContext.getCurrentInstance().update(compId); 
} 

我刪除了「動態=真「(似乎會導致更多問題)。通過偵聽器更新支持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

+0

你有沒有類似的或**相同的問題?由於您無法更新單個選項卡......您更新了代碼中的所有選項卡。這樣可行。但那不是OP要求的。 – Kukeltje

+0

忘了添加標籤ID。答案已更新。 –

+0

你確定**這個標籤的內容已更新嗎?你用什麼PF版本?是不是裏面的'自動更新'組件也被更新? – Kukeltje