[英]Cannot expand node of treetable in nested tabviews
當我有一個p:treeTable
內p:tabView
內部p:tabView
作為第二個選項卡,我無法展開/折疊的節點。 但這僅在非常具體的情況下才會發生,我將其簡化為最少的代碼:
<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;
}
因此,當我打開頁面時,轉到external2選項卡,我無法在inner1的treeTable中展開該節點。 但是,當我切換到inner2時,我可以擴展該treeTable中的節點。 更奇怪的是,當我切換回inner1時,現在也可以在其中擴展節點。 如果沒有嵌套的tabview,那也是正確的。
另外,當我刪除outer1選項卡時,行為是正確的。
另外,共享模型不會對此產生影響(我嘗試為每個treeTable使用不同的模型,但是行為是相同的)。
可能有某些原因嗎?還是PrimeFaces中的錯誤?
我使用Primefaces 4.0
有些想法,但是您問題的答案應該在內部...
好吧,首先,您的模型必須在允許其在請求之間保持其狀態的范圍內,否則您將始終擁有絕對相同的樹(因為在每個請求中,樹模型“根”將再次生成) 。 需要注意的另一重要事項是您必須保留根目錄,您的方法應如下所示:
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;
}
而且您必須記住要更新正確的樹(而且我認為僅更新一棵樹是相當復雜的,想象兩棵!)。 最后但並非最不重要的一點是,永遠不要對兩棵樹都使用一種模型,因為這會弄亂一切,在這種情況下幾乎不可能使事情正常進行。 嘗試使用兩個模型,並在樹模型(根模型)中保留適當的范圍(在后備bean中使用@ViewScoped或@SessionScoped或在CDI bean中使用@Session)。
希望對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.