我有一个用于编辑用户的dataTable。
我有commandLink在每一行打开模式对话框与选定的用户数据进行编辑。
在这个对话框中,我有一个保存用户的commandButton。
我有一个问题刷新数据表和显示新的编辑值的用户。
<p:commandButton value="Save" action="#{usersBean.updateUser()}" onclick="PF('editUserDlg').hide();" update=":adminForm:adminTabView:usersDataTable" styleClass="ui-priority-primary" style="float: right;" />
我按照BalusC的回答找到了组件的id,服务器日志中没有错误。
当我点击Save按钮时,我调用backing bean方法:
public void updateUser() {
int userId = selectedUserView.getId();
User user = adminSessionBean.getMe(userId);
try {
updateUser(user);
LOG.info("User seccessfully updated.");
} catch (Exception exc) {
String message = "Error updating user: " + exc.getMessage();
LOG.error(message);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, message, null));
}
}
和编辑的用户被正确保存(我已经在数据库中检查)。问题是,在模态对话框关闭后,我没有看到dataTable中新编辑的用户值。当我刷新页面时,我看到user的新值。
当我添加调用@PostConstruct init()方法后updateUser(user);我在dataTable中看到了更改的值,但我不确定这是否是正确的方法。
谢谢。我将在updateUser()方法之后调用init()
我不会调用init方法,这个方法只应该在bean按照注释状态构造之后调用。
尝试调用remoteCommand,而不是直接关闭刷新dataTable的对话框。之后,您可以从该命令关闭对话框。像这样。
<p:remoteCommand name="updateContent" update="table"
oncomplete="PF('dialog').hide();" />
没有直接尝试这个解决方案,但我认为应该有效。我用这种方法解决了一个类似的问题。
编辑:正如Kukeltje所说,您还必须刷新您的数据模型,以便dataTable接收到新数据。你可以在remoteCommand中添加一个actionListener来实现。