在模态对话框命令上启动刷新数据表按钮单击



我有一个用于编辑用户的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来实现。

最新更新