下面的代码是关于一个表的,我可以在其中添加(命令按钮)或删除(命令链接)行。两个按钮都在工作并调用相应的 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>