2013-10-23 25 views
0

父表我有這樣的結構:使用commandLink更新是孩子到另一個表

<h:dataTable id="baselist"> 
    <h:dataTable id=childlist"> 
     <p:commandLink update="should only update childlist"> 
    </h:dataTable> 
</h:dataTable> 

我用盡了一切我能想到的,但我只得到錯誤說,childlist無法找到。這種方式不可能更新嗎?

+0

你可以試試'update =「@ parent」' – kolossus

回答

0

請注意,子表數據表的id中包含索引號。

例如:

所述的childList表的父表的第一行中的ID是::form:baselist:0:childlist

所述的childList表的父表的第二行中的ID爲: :form:baselist:1:childlist

中的childList表的父表的第三行中的ID是::form:baselist:2:childlist

等等...

解決方案:

更新父表,以便一切都得到更新和同步,包括在所有行

如表的childList。

update=":form:baselist"

Unrealated:

您可以通過右鍵看到你的元素完全合格ID點擊瀏覽器和查看頁面源渲染的頁面。

+0

是的,我試過了,它可以工作;我的問題是,爲什麼我不能只更新子表。我試過:'@ parent',它不會更新它看起來的任何東西;並且還提供了完整的合格路徑,即使我可以看到它是正確的,但仍不能找到id的例外情況。 – nivis

0

你可以嘗試使用#{component.parent.clientId},但你不會像你想象的那樣獲得更多。

JSF通常會重建整個結構看答案:Does Facelets rebuild the whole page if Ajax is trigger from a form and updates another?

此外,如果已修改baselist,那麼你會得到進入問題爲:0,:1 namingcontainer ID將變得不一致。 例如如果您從baselist中刪除第一個元素,JSF將使用新的id重新創建視圖。 so :form:baselist:1:childlist'將變成:form:baselist:0:childlist

我不知道你是否會得到一個錯誤,但肯定這會造成一些遲早的一些痛苦。