0

次の構成があります: JSF: Apache MyFaces JSF-2.1 Core API (バージョン: 2.1.10) PrimeFaces 3.4.2 Tomcat 7.0.35

rowExpansion を持つ DataTable と、rowExpansion にボタンを持つパネルがあります。ユーザーがボタンをクリックしたときに、rowExpansion 内のパネルのみを更新したいと思います。

<p:dataTable id="vmt" var="vmtemplate" value="#{myViewBean.myList}" rowKey="#{vmtemplate.id}">
        <p:ajax event="rowToggle" listener="#{myViewBean.onRowToggle}" update=":growl" /> 
     <p:column style="width:2%"><p:rowToggler /></p:column>
     <p:column>...</p:column>
        <p:rowExpansion>
         <p:panel id="exp_panel" header="#{vmtemplate.name} Instances">
      <h:form id="instancesForm">
                                <p:commandButton id="refreshRowExpPanel" title="Refresh" update=":growl" action="#{myViewBean.reloadData}"/> 
          </h:form>                                 
          </p:panel>
     </p:rowExpansion>
</p:dataTable>

exp_panel を更新するには、refreshRowExpPanel ボタンの更新プロパティを設定する必要があると思いますが、update=":growl :expanel" に設定するとエラーが発生します。

「mainForm:vmt:0:refreshRowExpPanel」から参照される識別子「:expanel」を持つコンポーネントが見つかりません。

したがって、パネルの生成された ID は「mainForm:vmt:0:refreshRowExpPanel」ですが、これを更新に指定すると (update=":mainForm:vmt:0:refreshRowExpPanel")、同じエラーが発生しました。

「mainForm:vmt:0:refreshRowExpPanel」から参照される識別子「:mainForm:vmt:0:refreshRowExpPanel」を持つコンポーネントが見つかりません。

update=":mainForm" では機能しますが、dataTable 全体が更新され、展開された行が閉じられるため、問題ありません。

おそらくJSから、または他のアイデアから、rowExp内の私のパネルのみを更新する方法を提案してください。

どうも!

4

2 に答える 2

0

dataTable の外にフォームがあることに気付きました。

<h:form id="outerForm">
<p:dataTable id="vmt" var="vmtemplate" value="#{myViewBean.myList}" rowKey="#{vmtemplate.id}">
pansion>
...
</p:dataTable>
</form>

外側のフォームを削除し、更新値を「@form」に変更することで問題が解決しました

于 2013-08-12T08:26:01.610 に答える
0

先頭にコロンのないパネルの ID を使用することをお勧めします。

update="mainForm:vmt:0:refreshRowExpPanel"

また、参照の作成に関するこの投稿もお読みください。

于 2013-08-11T11:40:31.927 に答える