具有一对多关系的 LookupField

LookupField with one-to-many relationship

我想在我的文档中显示一对多关系 - 一个带有值的简单下拉列表。为此,我尝试创建和配置 LookupField component by using Cuba platform.

我有两个实体:

卡片项目:

@NamePattern("The document in the following state: %s|cardState")
@Table(name = "TKB_CARD_ITEM")
@Entity(name = "tkb$CardItem")
public class CardItem extends StandardEntity {

    // skipped

卡片类型:

@NamePattern("CardType: %s, %s |cardTypeItem, cardTypeName")
@Table(name = "TKB_CARD_TYPE")
@Entity(name = "tkb$CardType")
public class CardType extends StandardEntity {

    @OneToMany(targetEntity=CardItem.class )
    private List<CardItem> cardItems;

    // skipped

在我的 card-item-edit.xml 中,我有以下内容:

<dsContext>
    <datasource id="CardItemDs" class="com.company.tkb.entity.CardItem" view="_local"/>
    <collectionDatasource id="CardTypeDs" class="com.company.tkb.entity.CardType" view="_local">
        <query>select c from tkb$CardType c</query>
    </collectionDatasource>
</dsContext>
<layout>
    <lookupField datasource="CardItemDs" property="cardTypeName" optionsDatasource="CardTypeDs"/>

我用一些值填充了 table TKB_CARD_TYPE。现在,当我创建 CardItem 时,我试图获得一个包含值的下拉列表,但该列表是空的。

可能是什么问题?

如果能提供信息,我将不胜感激。感谢大家。

有什么帮助:

CardItemEditclass中我添加了以下内容:

public class CardItemEdit extends AbstractEditor<CardItem> {
    @Inject
    private Datasource<CardItem> cardItemDs;

    @Inject
    private Metadata metadata;

    @Override
    public void init(Map<String, Object> params) {
        CardItem cardItem = metadata.create(CardItem.class);
        cardItemDs.setItem(cardItem);
    }   
}

然后我改变了关系的方向:我的CardItem实体的一部分:

@NamePattern("The document in the following state: %s|cardState")
@Table(name = "TKB_CARD_ITEM")
@Entity(name = "tkb$CardItem")
public class CardItem extends StandardEntity {

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "CARD_TYPE_ID")
    protected CardType cardType;

    // skipped

我的 CardType 实体的一部分:

@NamePattern("Тип входящего документа: %s | cardTypeName")
@Table(name = "TKB_CARD_TYPE")
@Entity(name = "tkb$CardType")
public class CardType extends StandardEntity {

    // skipped

我是这样定义dsContextlookupField的:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<window xmlns="http://schemas.haulmont.com/cuba/window.xsd"
        caption="msg://editCaption"
        class="com.tkbbank.client.web.item.CardItemEdit"
        datasource="cardItemDs"
        focusComponent="fieldGroup"
        messagesPack="com.tkbbank.client.web.item">

     <dsContext>
        <datasource id="cardItemDs" class="com.tkbbank.client.entity.CardItem" allowCommit="false"/>
            <collectionDatasource id="cardTypeDs" class="com.tkbbank.client.entity.CardType" view="_local">
            <query>
                <![CDATA[select e from demo$CardType e]]>
            </query>
        </collectionDatasource>
    </dsContext>


    <dialogMode forceDialog="true" width="AUTO"/>
    <layout expand="windowActions" spacing="true">
        <fieldGroup id="fieldGroup" datasource="cardItemDs">
            <column width="500px">
                <field id="cardCreationDate" editable="false"/>
                <field id="cardType" caption="Тип документа">
                    <lookupField datasource="cardItemDs" property="cardType" optionsDatasource="cardTypeDs"/>
                </field>
                <field id="cardSubtype"/>
                <field id="cardAutoFill"/>
                <field id="cardOutcomeNumber"/>
                <field id="cardDate"/>
                <field id="cardOrganization"/>
                <field id="cardDeliveryMethod"/>
                <field id="cardAdditionalInformation"/>
                <field id="registratorName"/>
            </column>
        </fieldGroup>
        <frame id="windowActions" screen="editWindowActions"/>
    </layout>
</window>

我现在看到的。我的名片:

用数据填充 CardType 的接口:

查看所有文档的界面:

现在一切正常

附带:关于 "Can’t find getter for property" 异常的非常有用的问题(也出现了这个错误):