行未更新 - 对话框中的更新按钮(由 dataTable 中的按钮打开)

Posted

技术标签:

【中文标题】行未更新 - 对话框中的更新按钮(由 dataTable 中的按钮打开)【英文标题】:Row not updating - Update button within dialog (opened by button within dataTable) 【发布时间】:2013-11-30 13:23:15 【问题描述】:

版本:PrimeFaces 3.5、JPA 2.1、GlassFish 4.0、Java EE 7、JSF 2.0。

对话框正常打开并显示版本数据,但此对话框中的“更新”按钮不起作用。按钮代码如下:

<p:commandButton actionListener="#funcionarioMB.save"
                                     value="Alterar"
                                     oncomplete="dlg.hide();"
                                     update=":tblFuncionarios"
                                     ajax="false" />

完整的对话代码:

<p:dialog id="dlg"
              header="Editar funcionário"
              modal="true"
              widgetVar="editarDialog"
              closable="true"
              draggable="false"
              appendToBody="true"
              maximizable="false"
              minimizable="false"
              position="center"
              resizable="false"
              showEffect="slide">
        <p:outputPanel>
            <h:form id="formAlterar">
                <h:panelGrid id="infosFuncionario">

                    <!-- inputs -->

                    <p:commandButton actionListener="#funcionarioMB.save"
                                     value="Alterar"
                                     oncomplete="dlg.hide();"
                                     update=":tblFuncionarios"
                                     ajax="false" />
                </h:panelGrid>
            </h:form>
        </p:outputPanel>
    </p:dialog>

更新数据表中的commandButton:

<h:form>
                <p:commandButton actionListener="#funcionarioMB.prepareEdit(funcionario.id)"
                                 value="alterar"
                                 oncomplete="editarDialog.show();"
                                 update=":formAlterar" />
            </h:form>

托管 bean 中的方法 save():

public void save() 
    Cargo cargo = this.cargoRepositorio.findById(this.cargoID);
    funcionario.setCargo(cargo);

    if (this.getFuncionario().getId() == null) 
        this.funcionarioRepositorio.add(this.getFuncionario());
     else 
        this.funcionarioRepositorio.edit(this.getFuncionario());
    
    this.funcionario = new Funcionario();
    this.funcionarios = null;

存储库中的方法edit():

public void edit(Funcionario funcionario) 
    this.manager.merge(funcionario);

如果没有 ajax="false",更新实体的按钮将不起作用。

【问题讨论】:

也无法使用 JDBC 连接。 【参考方案1】:

你的数据表在哪里?

只需重新创建/重建您的数据表值。

在你的 managedbean/backing bean 中,在 CRUD 操作执行后添加这个方法

public List<T> refreshDatatable()
    list=yourEJBFacade().getList();
    return list

在你的会话 bean 中

public List<T> getList()
 Query q = entityManager.createQuery("select a from YourEntityClass a");
 return q.getResultList();

更新你的数据表 (update=":tblFuncionarios")

有关参考,请参阅此问题 Primefaces datatable Reset and Reload data

【讨论】:

谢谢,但是数据表正在正确刷新;已编辑的行未在数据库中更新。 我得到它的工作添加 ActionEvent actionEvent 作为“保存”方法的参数。【参考方案2】:

添加了ActionEvent actionEvent 作为save 方法的参数,现在它可以工作了,这要感谢Erick R. Ribeiro 在PrimeFaces Facebook 组中的提示。

【讨论】:

以上是关于行未更新 - 对话框中的更新按钮(由 dataTable 中的按钮打开)的主要内容,如果未能解决你的问题,请参考以下文章

C# Datagridview 行未通过插入数据库更新

棉花糖升级后,appwidget listview 行未更新或加载

如何根据对话框组件中的取消和是按钮更新父组件的材质幻灯片切换值?

更新工具栏按钮状态 MFC

在 ViewModel 中更新其绑定后,按钮未启用 [重复]

MFC中的Eidt控件怎样才能实时显示更新的内容?