PickList теряет ценность

У меня есть простой постоянный объект (Hibernate, если он делает что-то другое):

@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 все еще находятся в базе данных, но они больше не связаны...

Есть идеи, что происходит?

1 ответ

Я нашел решение проблемы. Вероятно, это всего лишь обходной путь, поскольку я не уверен, в чем проблема на самом деле - в методе setDualList я добавил следующую строку:

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

что решает все мои проблемы (так как симптом проблем заключается в том, что сеттер вызывается без значений).

Другие вопросы по тегам