2014-02-06 26 views
0

當裏面的p:tabView作爲第二個標籤時,我有一個p:treeTable,我無法展開/摺疊節點。但是,這在這個非常特殊的情況下,我已經提煉成最少的代碼纔會發生:無法展開嵌套標籤中的treetable節點

<h:form id="mainForm"> 
    <p:tabView id="outer" dynamic="false"> 
     <p:tab id="outer1"> 
     </p:tab> 
     <p:tab id="outer2"> 
      <p:tabView id="inner" dynamic="false"> 
       <p:tab id="inner1"> 
        <p:treeTable value="#{someBB.root}" var="wrapper"> 
         <p:column> 
          #{wrapper} 
         </p:column> 
        </p:treeTable> 
       </p:tab> 
       <p:tab> 
        <p:tab id="inner2"> 
         <p:treeTable value="#{someBB.root}" var="wrapper"> 
          <p:column> 
           #{wrapper} 
          </p:column> 
         </p:treeTable> 
        </p:tab> 
       </p:tab> 
      </p:tabView> 
     </p:tab> 
    </p:tabView> 
</h:form> 

模型也微乎其微:

private TreeNode root; 
{ 
    root = new DefaultTreeNode("root", null); 
    TreeNode documents = new DefaultTreeNode("root", root); 
    new DefaultTreeNode("node1", documents); 
    new DefaultTreeNode("node2", documents); 
} 

public TreeNode getRoot(){ 
    return root; 
} 

所以,當我打開網頁,進入outer2標籤,我無法展開inner1的treeTable中的節點。但是當我切換到inner2時,我可以展開該樹表中的節點。更奇怪的是,當我切換回inner1時,我現在可以擴展節點。如果沒有嵌套的標籤瀏覽也是正確的。

此外,當我刪除outer1選項卡時,行爲是正確的。

也分享模型不會影響這(我試過每個treeTable有不同的模型,但行爲是相同的)。

這是否有一些原因,或者它是PrimeFaces中的錯誤?

我用Primefaces 4.0

回答

0

一些思考,但回答你的問題應該是裏面...

嗯,首先,你的模型是在一個範圍內,允許它保持它在請求之間的狀態,否則你將永遠擁有絕對相同的樹(因爲在每個請求中將再次生成樹型「root」)。注意到其他重要的事情是,你必須保持根,你的方法應該是這樣的:

private TreeNode root; 
{ 
    if (root != null) 
     return root; 

    root = new DefaultTreeNode("root", null); 
    TreeNode documents = new DefaultTreeNode("root", root); 
    new DefaultTreeNode("node1", documents); 
    new DefaultTreeNode("node2", documents); 
} 

public TreeNode getRoot(){ 
    return root; 
} 

,你一定記得更新正確的樹(我認爲保持剛剛更新了一棵樹是相當複雜,想象兩個!)。最後,但並非最不重要的一點是,絕不要將一個模型用於兩棵樹,你會搞砸一切,幾乎不可能在這種情況下正常工作。嘗試使用兩個模型,並保持適當範圍(@ViewScoped或@SessionScoped在支持bean或@Session在CDI bean中)的treemodel(root)。

我希望這可以幫助你。

+0

嗨。感謝您的回覆,但它並沒有真正的幫助。我99%相信這是一個在primefaces中的錯誤。試試我的帖子中的示例表單並親自查看。實際上,我沒有兩個模型,也沒有爲每個請求生成根,這只是爲了保持示例儘可能短(它不會以任何方式影響行爲)。它在不同的標籤排序中起作用。如果我先切換到另一個選項卡,那麼這兩棵樹完美無缺地工作。我的解決方法是將第二個選項卡設置爲默認值,並在頁面加載時切換到第一個選項卡。不好,但它的工作原理。 – NeplatnyUdaj