I want my p:datatable to update/refresh after I deleted an entry. Deletion on DB side succeeds. After a manual refresh, the entry is gone. But I can not get the p:datatable to refresh itself automatically
I aldready tried ajax commands, checking execution order and different update targets.
p:datatable from index.xhtml:
<h:form id="form">
<p:dataTable id="table" var="row" value="#{mitarbeiterView.mitarbeiter}">
<p:column headerText="ID">
<h:outputText value="#{row.employeeId}" />
</p:column>
<p:column headerText="Name">
<h:outputText value="#{row.lastname}" />
</p:column>
<p:column headerText="Löschen">
<p:commandLink update=":form, :form:table" action="#{mitarbeiterService.deleteEmployee(mitarbeiterView.selectedEmployee)}"
title="Löschen" styleClass="ui-icon pi pi-trash">
<f:setPropertyActionListener value="#{row}" target="#{mitarbeiterView.selectedEmployee}" />
</p:commandLink>
</p:column>
</p:dataTable>
</p:panelGrid>
</h:form>
MitarbeiterView.java:
@Named(value = "mitarbeiterView")
@ViewScoped
public class MitarbeiterView implements Serializable {
private static final long serialVersionUID = 7924178697538784022L;
private List<Employee> mitarbeiter;
private Employee selectedEmployee;
@PostConstruct
public void init() {
SessionConfig.initSession();
mitarbeiter = Queries.findAllEmployees();
}
public List<Employee> getMitarbeiter() {
return mitarbeiter;
}
public void setMitarbeiter(List<Employee> mitarbeiter) {
this.mitarbeiter = mitarbeiter;
}
public void setSelectedEmployee(Employee selectedEmployee) {
this.selectedEmployee = selectedEmployee;
}
public Employee getSelectedEmployee() {
return selectedEmployee;
}
}
MitarbeiterService.java```
@Named(value = "mitarbeiterService")
@ViewScoped
public class MitarbeiterService implements Serializable {
private static final long serialVersionUID = -445070832052637147L;
public void deleteEmployee(Employee mitarbeiter) {
if (mitarbeiter != null) {
ManageEmployees.deleteEmployee(mitarbeiter.getEmployeeId());
}
}
The p:datatable should refresh itself. The deleted employee should be gone.
I think that you must just delete the
selectedEmployeefrom yourList<Employee>(mitarbeiter) .You can do the query again in the backend after delete or just remove the
selectedEmployeefrom your list. You must do this in methoddeleteEmployeeI think that
deleteEmployeemust be in theMitarbeiterViewManageBean. If you put thedeleteEmployeein theMitarbeiterViewManageBean you can do somethink like this: