2017-05-15 20 views
0

選択したタブの内容を更新しようとしていますが、メソッドが機能していないようです。p:tabコンテンツを更新できません

私が持っているもののこの種:

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

ライン:60秒ごとに各タブ内のコンテンツを更新することになっ

<p:poll interval="60" update=":tabsForm:tabs" oncomplete="doSomething()"/>

、問題は、それが常に選択されます、です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"

私も、私はここで見つける質問から他の方法の多くを試してみましたしかし、何も働いていません。 私のための最初のタブを更新して選択するか、まったく更新しません。

+0

更新するコンテンツを 'ui:fragment'でラップしようとしましたか?そうでない場合は、どうしてですか?あなたは何が問題だったのですか? – Kukeltje

+0

また、すべてのタブの更新後に選択したタブを開いたままにする必要がある場合は、Stackoverflowの質問について少なくとも2つの同様の質問があります:https://www.google.com/search?q=primefaces+keep+selected – Kukeltje

+0

'update =" version "はあなたの問題を解決していませんか? –

答えて

0

ダイナミックタブビュー内にタグを配置したくないと思います。これにより、個々のタブごとに投票が作成されます。代わりに、1つのポーリングタグを使用してタブを更新したいとします。あなたが...ちょうどその

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

とメインページ内のJavaScriptの

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

すべてのタブを更新し、現在のタブにフォーカスを維持してOKしている場合:

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

を私は "削除しましたdynamic = true "(より多くの問題を引き起こすようです)。リスナーを介してバッキングBeanからコンポーネントを更新することで、エラーメッセージを取り除くことができます。

個々のタブを更新するのは難しく、奇妙な動作になりがちです。あなたは試すことができますが、のtabIndexが0でない場合は明らかに+ =あなたはあなたの投票タグが

<p:poll interval="60" listener="#{mainPage.updateComponent('tabsForm:tabs:' += mainPage.tabIndex += ':version')}" oncomplete="doSomething();"/> 

ようなものになるだろう

public void onTabChange(TabChangeEvent event) { 
    tabIndex = ((TabView) event.getSource()).getIndex(); 
} 
//getter setter tabIndex 

でのtabIndex onTabChangeイベントをキャプチャしますのみ動作しているようですEL 3.0の場合のみ、代わりに.concatを使用することができます。私のPFバージョンは6.0です

+0

**同じ**の問題がありましたか? 1つのタブを更新することはできないので...コード内のすべてのタブを更新します。それは動作します。しかし、それはOPが要求したものではありません。 – Kukeltje

+0

タブIDを忘れました。回答が更新されました。 –

+0

あなたは**この**タブの内容だけが更新されていますか?そして、どのPFバージョンを使用していますか? 「事故」に​​よっても更新されている「自動更新」コンポーネントはありませんか? – Kukeltje

関連する問題