2017-02-13 7 views
0

값을 잃게 :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 객체는 데이터베이스에 있지만 더 이상 링크되어 있지 않습니다 ...

어떤 아이디어가 진행되고 있습니까?

답변

0

나는이 문제에 대한 해결책을 찾았습니다. 나는 문제가 실제로 무엇인지 잘 모르겠습니다 그것은 아마 만 해결합니다 - setDualList 방법, 나는 다음 줄을 추가 한 :

if (l.getSource().isEmpty() && l.getTarget().isEmpty()) return; 

문제의 증상이 있다는 것입니다으로 (내 모든 문제를 해결 setter는 값없이 호출됩니다.)