2012-02-18 58 views
3

我試圖用prependId來縮短更新命令。 如果我始終使用合格的ID,一切工作正常。 如果我使用prependId,該ID無法找到:鑑於:JSF - prependId不工作?

<h:form id="form"> 
<p:dataTable id="table"> 
//closing tags 

<p:commandButton update=":form:table"> //works 



<h:form prependId="false"> 
<p:dataTable id="table"> 
//closing tags 

<p:commandButton update=":table"> //works NOT! 

無法找到標識成分「表」。

我在做什麼錯?

+1

不應該只是'表'嗎? – 2012-02-18 17:29:13

+0

沒有BC有閉合標籤,所以如果你想從外面更新標籤,你必須使用「:」。正如我寫的,它與特定的ID一起工作。我只是想知道prependId是如何工作的... – membersound 2012-02-18 17:46:58

回答

4

如果您想從外部更新標籤,您必須使用「:」。正如我寫的,它與特定的ID一起工作。我只是想了解prependId是如何工作的...

這是唯一正確的如果prependId="true"。 update屬性需要clientId進行更新,並且通過將prependId設置爲false,您聲明該表單中的所有元素將具有與其服務器ID相同的clientId。正如Jigar在上面的評論中已經提到的那樣,它應該是table

如果你不相信我,然後在Firebug中嘗試一下,注意Primefaces dataTable的最外面的div元素的ID僅爲table。更新將能夠找到這個無論形式,因爲它正在尋找與此匹配的頁面上的ID。

這可能很危險,因爲它可能會非常容易地意外地在DOM上存在衝突的相同ID的多個組件。對於其他頁面或通過包含組件,第三方或以其他方式在內部具有唯一ID的內部DOM元素的頁面上,頁面更加真實。這些問題可能非常難以追查。

+1

好,所以使用完全合格的ID更好。 TY! – membersound 2012-02-20 18:51:18