代码之家  ›  专栏  ›  技术社区  ›  anon

具有一对多关系的查找字段

  •  0
  • anon  · 技术社区  · 6 年前

    我想在我的文档中显示一对多关系-一个带有值的简单下拉列表。为此,我尝试创建和配置 LookupField 使用组件 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"/>
    

    我把桌子填满了 TKB_CARD_TYPE 有一些价值。现在,我试图在创建carditem时获得一个包含值的下拉列表,但该列表为空。

    有什么问题吗?

    我将非常感谢你提供的信息。谢谢大家。

    1 回复  |  直到 6 年前
        1
  •  0
  •   anon    6 年前

    帮助:

    CardItemEdit 第一节增加了以下内容:

    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
    

    我定义了 dsContext lookupField 通过这种方式:

    <?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>
    

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

    enter image description here

    用数据填充CardType的接口:

    enter image description here

    查看所有文档的界面:

    enter image description here

    现在一切都好了。

    旁边:关于“找不到属性getter”异常的非常有用的问题(也出现了此错误):