【问题标题】:PickList lose valuePickList 失去价值
【发布时间】:2017-02-13 01:17:29
【问题描述】:

我有一个简单的持久对象(休眠,如果它有什么不同的话):

@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 代码看起来像(相关的 sn-p):

...
<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 对象仍在数据库中,但它们不再链接...

有什么想法吗?

【问题讨论】:

    标签: primefaces picklist


    【解决方案1】:

    我找到了解决问题的方法。这可能只是一种解决方法,因为我不确定问题实际上是什么 - 在 setDualList 方法中,我添加了以下行:

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

    这解决了我所有的问题(因为问题的症状是调用 setter 时没有值)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-21
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 2010-09-17
      相关资源
      最近更新 更多