我有以下问题:我有一个由Primefaces创建的表格。在此表中,我显示了@OneToMany关系的元素。用户单击一个名称,表格将显示此客户的关联关系。这工作正常。但是 - 用户应该从表中删除单个元素。因此,每个条目都有一个删除按钮。现在的问题是:如果我单击一个按钮,数据库中的条目将正确删除,但我的表单更新始终显示该条目。那么我必须改变什么呢?
<p:dataTable value="#{hauptBean.listeRisikotraeger.risikotraeger}"
var="tr" id="tab" styleClass="tabelle"
emptyMessage="Keine Risikoträger definiert"
rendered="#{not empty hauptBean.standardSelektion and(not empty hauptBean.listeRisikotraeger.risikotraeger and(!hauptBean.aenderung))}">
<p:column headerText="Risikoträger">
<h:outputText value="#{tr.name}" />
</p:column>
<p:column width="70">
<p:commandButton value="löschen"
actionListener="#{hauptBean.eintragLoeschen(tr)}"
update="@form" />
</p:column>
</p:dataTable>
第一个实体
@Entity
public class Risikobereich implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String risikobereich;
@OneToMany(fetch=FetchType.EAGER)
@JoinColumn(name="ri_id", referencedColumnName="id")
private List<Risikotraeger> risikotraeger;
[GETTER/SETTER]
和实体关系:
@Entity
public class Risikotraeger implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id_risiko;
private String name;
private String abstraktesRisiko;
[GETTER/SETTER]
编辑
这是我的会话Bean,它在后台完成所有操作:
@Override
public boolean loeschen(Risikotraeger traeger) {
boolean erfolgreich = false;
em.remove(em.merge(traeger));
erfolgreich = true;
return erfolgreich;
}
您是否分别重新加载listeRisikotraeger
删除了其中的记录?
一个简短的建议:为什么要在按下删除按钮而不是直接按数据表后更新@form
?如果数据表旁边还有其他组件要更新,我建议在每个组件上定义一个 ID 并引用它们。因此,您可以缩小应更新的页面元素的范围。例如:<p:datatable id=tableRisikotraeger .../>
... <p:commandButton value="löschen" update="tableRisikotraeger" .../>