2012-02-18 21 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

それは 'table'であってはなりませんか? –

+0

bcには終了タグがあるので、タグの外側から更新する場合は、 ":"を使用する必要があります。私が書いたように、それは特定のIDで動作します。私はちょうどprependIdが代わりにどのように働くかを知りたがっています。 – membersound

答えて

4

タグの外側から更新する場合は、「:」を使用する必要があります。私が書いたように、それは特定のIDで動作します。私はちょうど代わりにどのようにprependIdが動作するかを知りたいです...

prependId="true"これは正しいです。 update属性を使用するには、clientIdを更新する必要があり、prependIdをfalseに設定すると、そのフォーム内のすべての要素にサーバーIDと同じclientIdがあると主張します。だから先ほどのコメントでJigarがすでに述べたように、それはちょうどtableであるべきです。

あなたが私を信じていない場合は、Firebugで自分自身で試してみて、Primefaces dataTableの最も外側のdiv要素にidがちょうどtableであることがわかります。 Updateはこれに一致するページのIDを探しているので、フォームに関係なくこれを見つけることができます。

これは、DOM上で競合する同じIDを持つ複数のコンポーネントを間違いなく持つことは非常に簡単ですが、危険です。これは、他のページやコンポーネントを含むページ、他社製のページなど、一意のIDを持つ内部DOM要素を持つページでも同様です。この種の問題は、追跡が非常に困難な場合があります。

+1

これで、完全修飾IDを使用する方が良い方法です。タイ! – membersound

関連する問題