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

时间:2013-11-30 13:23:16

标签: primefaces eclipselink updates jpa-2.1

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

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

<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>

更新dataTable中的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”,更新实体的按钮就不起作用。

2 个答案:

答案 0 :(得分:0)

你的数据表在哪里?

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

在您的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

答案 1 :(得分:0)

添加ActionEvent actionEvent作为save方法的参数,现在它正在运行,感谢Erick R. Ribeiro在PrimeFaces Facebook小组中的暗示。