Primefaces 命令链接仅在单击两次后更新可更改



下面的代码是关于一个表的,我可以在其中添加(命令按钮)或删除(命令链接)行。两个按钮都在工作并调用相应的 bean 方法。但是,虽然每次单击添加按钮都会立即更新表,但对于删除按钮,我必须单击两次才能删除该行。即使第一次未删除该行,也会调用 Bean 方法。我该怎么办?谢谢!

    <h:form id="form">
        <table>
            <tr>
                <td>
                    <h:panelGrid columns="2" width="100%">
                        <p:dataTable id="univertitiesTable" value="#{universityBean.universityList}" var="university"
                            editable="true" editMode="cell" style="align:center;" >
                            <p:column headerText="Name" style="width:80px" >
                                <p:inputText value="#{university.name}" style="width:25px;" id="nameField"  label="name"  />
                            </p:column>
                            <p:column headerText="" style="width:20px; ">
                                <p:commandLink actionListener="#{universityBean.deleteUniversity}" update="univertitiesTable" id="removeButton" ajax="true">
                                    <h:graphicImage value="/resources/icones/delete.gif" />
                                    <f:setPropertyActionListener value="#{university}"
                                        target="#{universityBean.university}" />
                                </p:commandLink> 
                            </p:column>
                        </p:dataTable>
                        <p:commandButton value="+" update="univertitiesTable" id="addButton" ajax="true"
                            actionListener="#{universityBean.addUniversity}"
                            styleClass="ui-priority-primary"  />
                    </h:panelGrid>                  
                </td>
            </tr>
            <tr>
                <td colspan="2" align="center">
                    <h:commandButton id="save" value="Save"
                        action="#{universityBean.save}" binding="#{save}" />
                </td>
            </tr>
        </table>    
    </h:form>

你必须使用 action 而不是 actionListener 。更新是在操作完成后完成的,因此当您未指定任何操作时,更新将立即完成。因此,当您进行另一次更新时,视图将识别出该行已删除;当您再次单击链接时,将完成此操作。
顺便说一句,无论如何,ajax="true"ajax属性的默认值。
即:

<p:commandLink action="#{universityBean.deleteUniversity}" update="univertitiesTable" id="removeButton">
  <h:graphicImage value="/resources/icones/delete.gif" />
  <f:setPropertyActionListener value="#{university}"
    target="#{universityBean.university}" />
</p:commandLink> 

最新更新