0

このトピックを検索し、すべての提案を試しましたが、非常に単純なように見えるものをうまく機能させることができないようです。

私は PrimeFaces 3.4 を持っており、バッキング Bean<p:dataTable>の a からデータが取り込まれ、すべての行の列の 1 つに a があります。データテーブルの単純な削除と更新を実装しようとしています。ただし、要素はオブジェクトから削除されますが、データ テーブルは更新されません。List<p:commandLink>List

Bean (ビュースコープ):

public void deleteRow(rowType row){
    this.tableDataList.remove(row);
}

意見:

<h:form id="form">
    <p:dataTable id="dt" var="dt" value=#{managedBean.tableDataList}
                 rowKey="#{dt.id}" selection="#{managedBean.selectedRow}"
                 selectionMode="single">
       <p:column><h:outputText value="#{dt.field1}"/></p:column>
       <p:column><h:outputText value="#{dt.field2}"/></p:column>
       <p:column><h:outputText value="#{dt.field3}"/></p:column>

       <p:column width="60">
          <p:commandLink id="deleteCl"
                         value="Delete"
                         actionListener="#{managedBean.deleteRow(dt)}"
                         update=":form:dt"
                         />
       </p:column>
</h:form>

私が見る限り、PrimeFaces 3.4 のデータ テーブルは、コマンド リンクなどの子コンポーネントを介して更新できるはずですが、機能させることができません。フェーズ リスナーを実装しているので、レンダリング レスポンス フェーズの前に検証やその他のエラーがないことを確認できますが、ブラウザ ウィンドウを更新しない限り、データ テーブルには削除された行が表示され続け、削除された行は消えてしまいます。

コマンド リンクで設定ajax="false"すると機能しますが、ページ全体が不必要に更新されます。

私が試してみました:

  • actionとの間の変更actionListener
  • コマンド リンク属性にさまざまな組み合わせで次の変更を加えます。
    • process="@this"
    • update="@this"
    • update="@form"

面倒なことは、コマンド リンクを含む同様のテーブルがあることです。各リンクは、最初にクリックされた行に基づいて取得されたデータが取り込まれた別のデータ テーブルを含むダイアログ ウィンドウを開きます。同じページで完全に機能します。ああ!

4

1 に答える 1

1

これからいくつかのポイントをモデル化して、役立つかどうかを確認してください。

      <h:outputText escape="false" value="#{message.noCompaniesFound}" rendered="#{companyController.companyModel.rowCount == 0}"/>
            <h:panelGroup rendered="#{companyController.companyModel.rowCount > 0}">
                <p:commandButton id="addButton" value="#{message.newCompany}" oncomplete="companyDialog.show()" icon="ui-icon-plus" title="#{message.addCompany}" rendered="#{loginController.privileges.contains(bundle.SuperUser)}"/>  

                <p:dataTable id="companyList" var="company" widgetVar="companyTable" value="#{companyController.companyModel}" rowKey="#{company.name}" selection="#{companyController.selectedCompany}" selectionMode="single"
                             paginator="true" rows="10"
                             paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                             rowsPerPageTemplate="5,10,15,20,50,100">

                    <p:ajax event="rowEdit" update="@this" listener="#{companyController.saveCompany(company)}">
                        <f:param name="company" value="#{company}"/>
                    </p:ajax>      

                    <f:facet name="header">
                        <p:outputPanel>
                            <h:outputText value="#{message.search}: "/>
                            <p:inputText id="globalFilter" onkeyup="companyTable.filter()"/>
                        </p:outputPanel>
                    </f:facet>

                    <p:column id="name" headerText="#{message.name}" filterBy="#{company.name}" filterMatchMode="contains" filterStyle="display: none;">
                        <h:outputText value="#{company.name}"/>
                    </p:column>

                    <p:column headerText="#{message.editOptions}" style="width:10px;">
                        <p:commandButton id="editButton" update=":companyForm" oncomplete="editDialog.show()" icon="ui-icon-pencil" title="#{message.edit}">                                
                            <f:setPropertyActionListener value="#{company}" target="#{companyController.selectedCompany}"/>
                        </p:commandButton>
                        <p:commandButton id="deleteButton" update=":companyForm" oncomplete="confirmation.show()" icon="ui-icon-trash" title="#{message.delete}">                                
                            <f:setPropertyActionListener value="#{company}" target="#{companyController.selectedCompany}"/>
                        </p:commandButton>
                    </p:column>
                    <f:facet name="footer">
                    </f:facet>
                </p:dataTable>
            </h:panelGroup>


            <p:confirmDialog id="confirmDialog" message="#{message.sureYouWantToDelete} #{companyController.selectedCompany.name} ?" severity="alert" widgetVar="confirmation">
                <p:commandButton id="confirm" value="#{message.yes}" onclick="confirmation.hide()" actionListener="#{companyController.deleteCompany}" update="companyForm" />
                <p:commandButton id="decline" value="#{message.no}" onclick="confirmation.hide()"/>    
            </p:confirmDialog>
于 2012-09-21T18:10:05.957 に答える