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
selectedEmployee
from yourList<Employee>
(mitarbeiter
) .You can do the query again in the backend after delete or just remove the
selectedEmployee
from your list. You must do this in methoddeleteEmployee
I think that
deleteEmployee
must be in theMitarbeiterView
ManageBean. If you put thedeleteEmployee
in theMitarbeiterView
ManageBean you can do somethink like this: