我希望我的p:datatable在删除条目后进行更新/刷新。在数据库端删除成功。手动刷新后,该条目消失了。但是我无法让p:datatable自动刷新自身
我已经准备好尝试使用ajax命令,检查执行顺序和不同的更新目标。
p:index.xhtml中的数据表:
SELECT count(distinct o.id) AS count
FROM offer o
INNER JOIN (SELECT e.event_id, e.event_tag, e.payout, e.offer_id FROM event e ORDER BY e.offer_id ASC) e
ON e.offer_id = o.id
MitarbeiterView.java:
<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>
MitarbeiterService.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;
}
}
p:datatable应该刷新自己。被删除的员工应该走了。
答案 0 :(得分:1)
我认为您只需要从selectedEmployee
(List<Employee>
)中删除mitarbeiter
。
您可以在删除后在后端再次查询,也可以从列表中删除selectedEmployee
。您必须在方法deleteEmployee
我认为deleteEmployee
必须在MitarbeiterView
ManageBean中。如果将deleteEmployee
放在MitarbeiterView
ManageBean中,您可以执行以下操作:
public void deleteEmployee(Employee mitarbeiter) {
if (mitarbeiter != null) {
ManageEmployees.deleteEmployee(mitarbeiter.getEmployeeId());
mitarbeiter = Queries.findAllEmployees();
}
}
答案 1 :(得分:0)
好的,新答案。评论编辑器看起来只是红润的。
谢谢,这行得通。现在,删除方法如下所示:
public void deleteEmployee(Employee mitarbeiter, MitarbeiterView view) {
if (mitarbeiter != null) {
ManageEmployees.deleteEmployee(mitarbeiter.getEmployeeId());
view.setMitarbeiter(Queries.findAllEmployees());
}
}
和p:列
<p:column headerText="Löschen">
<p:commandLink update=":form, :form:table" action="#{mitarbeiterService.deleteEmployee(row, mitarbeiterView)}"
title="Löschen" styleClass="ui-icon pi pi-trash"/>
</p:column>
忘记了我不使用实时实体。当终身BACKend开发人员必须设计FRONTend时会发生;)
更新: 如果我添加一个init方法,将MitarbeiterView绑定到静态变量,则代码看起来会更好。传递给该方法既肮脏又丑陋。