값을 잃게 :PickList에 내가 (그 어떤 다른 점이 있다면, 최대 절전 모드)를 간단한 영속 객체가
PrimeFaces 코드 (관련 조각)과 같은@Entity
Class ObjectA
{
private Long id;
private String name;
private String description;
private List<ObjectA> children = new LinkedList<>();
...
...
...
public org.primefaces.model.DualListModel<ObjectA> getDualList() {
org.primefaces.model.DualListModel<ObjectA> l = new org.primefaces.model.DualListModel<>();
l.setSource(this.children);
l.setTarget(database.getAllChildren()); // performs database query to retrieve all objectA that are not corrently linked to any objectA.
...
return l;
}
public setDualList(org.primefaces.model.DualListModel<ObjectA> l) {
this.children = l.getSource();
...
}
}
:
...
<p:dataTable id="table" value="#{managedBeanA.getAllObjects}" var="iterator" paginator="true" rows="10" >
...
...
<p:rowExpansion>
<p:pickList value="#{iterator.dualList}" var="l" itemLabel="#{l.name}" itemValue="#{requirement.id}">
<f:facet name="sourceCaption">Linked Children</f:facet>
<f:facet name="targetCaption">Unlinked Children</f:facet>
<p:ajax event="transfer" listener="#{managedBeanA.handleTransfer(iterator)}"/>
</p:pickList>
</p:rowExpansion>
</p:dataTable>
무엇 managedBeanA.handleTransfer 않습니다 단순히 전달 된 개체를 유지합니다.
모든 것이 멋지게 보이고, 행을 확장 할 수 있으며 getDualList가 호출됩니다. 다른 행을 확장하면 다른 getDualList가 호출됩니다. 모두 예상대로입니다.
원본에서 대상으로 항목을 이동하면 managedBeanA.handleTransfer가 호출되고 관련 개체가 데이터베이스에 유지됩니다.
그리고 여기에 질문이 있습니다. 테이블이 업데이트 될 때 - 양식 제출 또는 아약스 중 하나입니다. setDualList가 p : dataTable에서 EMPTY getSource로 호출되는 것을 볼 수 있습니다. 본질적으로 모든 이전에 지속 된 링크 (즉 this.children = null). 이전에 링크 된 ObjectA 객체는 데이터베이스에 있지만 더 이상 링크되어 있지 않습니다 ...
어떤 아이디어가 진행되고 있습니까?