gpt4 book ai didi

jsf-2 - Primefaces commandLink 仅在单击两次后更新数据表

转载 作者:行者123 更新时间:2023-12-03 18:07:29 25 4
gpt4 key购买 nike

以下代码是关于一个表的,我可以在其中添加 (commandButton) 或删除 (commandLink) 行。两个按钮都在工作并调用对应的 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。更新是在操作完成后完成的,因此当您不指定任何操作时,更新会立即完成。因此,当您进行另一次更新时, View 会识别出该行已被删除;当您再次单击链接时完成。
顺便说一句,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>

关于jsf-2 - Primefaces commandLink 仅在单击两次后更新数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20010654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com