0

我已经搜索了这个主题并尝试了所有建议,但是我似乎无法让看似非常简单的事情起作用。

我有一个 PrimeFaces 3.4 ,其中的数据是从我的支持 bean 中的<p:dataTable>a 填充的,并且每一行的其中一个列中都有 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 回答