版本: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”,更新实体的按钮就不起作用。
答案 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小组中的暗示。