通过使用commandButton更新数据表,我遇到了一些问题。这是xhtml文件:
<div class="grid_16">
<h:form id="list">
<p:messages></p:messages>
<p:dataTable styleClass="result-table" var="user" id="usersList"
value="#{listUsersController.users}" widgetVar="userTable"
paginator="true" rows="10" paginatorAlwaysVisible="false">
<f:facet name="header">
Listado de usuarios
</f:facet>
<p:column>
<f:facet name="header">
<h:outputText value="#{cms['users.username']}" />
</f:facet>
#{user.username}
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{cms['users.name']}" />
</f:facet>
#{user.name}
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{cms['users.lastname']}" />
</f:facet>
#{user.lastname}
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{cms['users.active']}" />
</f:facet>
#{user.active}
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="#{cms['general.actions']}" />
</f:facet>
<p:commandButton value="Eliminar" image="ui-icon-trash"
actionListener="#{listUsersController.deleteUser}"
update="list:usersList">
<f:param name="user" value="#{user.id}" />
</p:commandButton>
</p:column>
</p:dataTable>
</h:form>
</div>
问题是当单击执行动作listUsersController.deleteUser的commandButton时。该方法成功执行并删除用户。但是数据表没有更新。我希望删除的记录不再出现在带有ajax的列表中。
我已经使用update="@form"
,update="@parent"
,update="@all"
,update="usersList"
,update=":list:usersList"
进行了测试,但没有任何效果。
这是managedBean中的方法:
public String deleteUser() {
try {
FacesContext fc = FacesContext.getCurrentInstance();
Map<String, String> params = fc.getExternalContext().getRequestParameterMap();
int id = Integer.parseInt(params.get("user"));
userService.removeUserById(id);
FacesContext.getCurrentInstance().addMessage
(null,new FacesMessage(FacesMessage.SEVERITY_INFO,MessageProvider.getMessageProvider()
.getValue("cms","users.error.userDoesNotExist"),""));
return SUCCESS;
} catch (EntityNotFoundException e) {
FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR,MessageProvider
.getMessageProvider().getValue("cms","users.error.userDoesNotExist"),""));
return ERROR;
}
}
答案 0 :(得分:9)
删除后需要从数据库重新加载users
。
所以,而不是单独的
userService.removeUserById(id);
你应该做
userService.removeUserById(id);
users = userService.list();
答案 1 :(得分:0)
如果你使用了一个用户,而不是列表中的用户,那么你似乎正在删除db中的用户 - #{listUsersController.users}
...
您应该发布方法中的代码:userService.removeUserById(id);
我无法分辨那里发生了什么,但如果您没有更新用户列表,那么dataTable将永远不会(成功)更新! / p>
答案 2 :(得分:0)
看起来数据表没有刷新,请尝试使用update =“:userLists”或update =“:lists:userLists”,“:”告诉它查找从root开始的id。目前看起来它无法找到要更新的ID。相反,将它放在p:outputPanel中,给它一个id然后执行类似update =“:panel”的操作。我想这会奏效。