0

私はJSF2.1でprimefaces3.3を使用しています。以下のコードには、データベースから抽出されたデータの行を含むprimeFaces dataTableがあり、ページの左側にあるツリーコンポーネントから正しくアクティブ化されています。dataTableが表示され、正しく動作します。「update」を呼び出す削除機能があり、dataTableを更新し、データベースの更新後に変更を反映します。私の問題はf:facet(id = "header")にあります。そのファセットには、dataTableに新しい行を作成するcommandLinkが含まれています。私のデータベースが正しく更新されているという意味で機能します。この後、dataTableは更新されません。dataTableを更新するには、ツリーコンポーネント(ページの左側)で別のノードをクリックしてから、元のtreeNodeに戻って、dataTableが完全に更新されていることを確認する必要があります。dataTableを動的に更新するためにコードに何を追加できますか?残念ながら、ここで試したすべての順列を追加することはできません。この問題に長い時間を費やしてきました。ご意見をいただければ幸いです。

    <h:form id="formRight" >            
    <p:dataTable var="material" value="#{entityCrudTreeBean.materialList}" id="materials" editable="true" paginator="true" rows="10" sortBy="#{material.name}">
                <p:ajax event="rowEdit" listener="#{entityCrudTreeBean.onEditRow}"/>
                <f:facet id="header" name="header">
                    In-Cell Material Editing
                    <br />
                    <p:commandLink id="create" value="Add new material" action="#{entityCrudTreeBean.createNewMaterial}" update=":formRight"/>
                </f:facet>
                <p:column headerText="Name" style="width:125px">
                    <p:cellEditor>
                        ...
                    </p:cellEditor>
                </p:column>

                <p:column headerText="Options" style="width:10px" >
                    <p:rowEditor />
                    <p:commandLink id="delete" action="#{entityCrudTreeBean.deleteRow(material)}" update=":formRight">
                        <h:graphicImage value="#{resource['icons:Delete-icon.png']}" />
                    </p:commandLink>
                </p:column>
            </p:dataTable>
    </h:form>

編集:行をに変更して <p:commandLink id="create" value="Add new material" action="#{entityCrudTreeBean.createNewMaterial}" update=":formRight:materials"/> も機能しません編集:に変更して <f:facet id="header" name="header"> In-Cell Material Editing <br /> <p:commandLink id="create" value="Add new material" ajax="true" process="@this" action="#{entityCrudTreeBean.createNewMaterial}" update="@form"/> </f:facet> も問題は解決しません。

4

2 に答える 2

2

しばらく前にあなたと同じような問題がありました。

私の作業コードは次のようになります。

<f:facet name="header">Product List
<p:commandLink id="create" value="Add new product" ajax="true" process="@this" 
action="#{modelBean.save}" update="@form"/>
</f:facet>
于 2012-08-16T14:37:18.310 に答える
0

スティーブン、あなたは正しい方向に進んでいます!これは、より簡単な方法で解決されました。マネージドBeanのdataTableリストを更新しました。これは、削除では行いましたが、挿入では行いませんでした。そこに大規模な監視。このコードは機能 <p:commandLink id="create" value="Add new material" action="#{entityCrudTreeBean.createNewMaterial}" update=":formRight"/> します:私の後の人々へのヒント:Primefaces 3.3には、dataTable内の更新に関する既知の問題があります。フォームのレイアウトなどの別のコンポーネントでdataTableをラップする必要があります。ラッパーでupdateを呼び出すと機能します。8月15日のprimefacesブログによると、これは3.4.RC1で修正されています。しかし、彼らはツリーコンポーネントを変更しました。アップグレードする前に、3.4の最終リリースを待ちます。

于 2012-08-17T07:10:26.010 に答える