2017-02-13 72 views
0

我有一個簡單的持久化對象(Hibernate的,如果它使任何不同):PICKLIST失去價值

@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(); 
     ... 
    } 

} 

的PrimeFaces代碼如下所示(相關代碼段):

... 
<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並將相關對象保存在數據庫中。

但是這裏是一個問題,當表更新時 - 無論是表單提交還是ajax,我都可以看到setDualList在p:dataTable的EMPTY getSource中被調用,實質上,它打破了所有以前持續的鏈接(即this.children = null)。以前連接的ObjectA對象仍然在數據庫中,但它們不再鏈接...

任何想法發生了什麼?

回答

0

我找到了解決問題的辦法。這可能是唯一的解決方法,因爲我不知道這個問題實際上是什麼 - 在setDualList方法,我已經添加了以下行:

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

解決了我的所有問題(如有關問題的症狀是,該setter被稱爲沒有值)。