0

当我单击任何一行并单击删除链接时,会出现确认对话框,但是一旦单击该对话框,行选择就会更改。选定的行不会被删除,但其他行会被删除。请帮助修复它。

<p:column headerText="Delete" width="50" style="text-align:center">
            <p:commandLink id="showDialogButton"
                update=":studyPlanEditForm:display" onclick="cdDialog.show()"
                value="delete">
            </p:commandLink>
            <p:dialog widgetVar="cdDialog" appendToBody="true"
                header="Are you sure to delete this substudyplan?">
                <p:panel>
                <p:commandButton value="Yes" process=":studyPlanEditForm:display" 
                    action="#{editBean.deleteSubStudyPlan(selectedRow)}"
                    onclick="cdDialog.hide();"
                    update=":studyPlanEditForm"/>
                <p:commandButton value="No" onclick="cdDialog.hide();"
                     type="button"/>
                </p:panel>
            </p:dialog>
        </p:column>
4

1 回答 1

0

对话框必须在表格之外。此外,在删除按钮中,您正在更新组件“:studyPlanEditForm:display”。我在片段中没有看到该组件。对话框内的面板应该有 id="display",因为对话框需要更新。

您可以在 primefaces展示中看到一个类似使用 casi 的工作示例。您只需替换显示确认消息内容的对话框,并添加一个删除该行的按钮。托管 bean 已经具有对选定行的引用。

这就是删除按钮的样子

<p:column headerText="Delete" width="50" style="text-align:center">
    <p:commandButton id="showDialogButton"
             update=":studyPlanEditForm:display" onclick="cdDialog.show()"
             value="delete">
        <f:setPropertyActionListener value="#{selectedRow}" target="#{bean.selectedRow}" />
      </p:commandButton>
</p:column>

这是对话框(必须在表外):

<p:dialog widgetVar="cdDialog" appendToBody="true"
          header="Are you sure to delete this substudyplan?">
    <p:panel id="display">
        <p:commandButton value="Yes" process="@this" 
                action="#{editBean.deleteSubStudyPlan}"
                onclick="cdDialog.hide();"
                update=":studyPlanEditForm"/>
        <p:commandButton value="No" onclick="cdDialog.hide();"
                 type="button"/>
    </p:panel>
</p:dialog>

因此,托管 bean 有一个名为的属性selectedRow,并且在调用方法 deleteSubStudyPlan 时,该属性包含属于表中所选行的实体。

于 2012-07-12T15:06:31.553 回答