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

lookuppickerfield中的动态数据

  •  -1
  • anon  · 技术社区  · 6 年前

    我有 screen 以及 screen controller . 有两个 lookupPickerField 屏幕上的组件。

    一个简单的任务-当其中第一个(pk)的值发生变化时,第二个应该加载依赖值(fk)。

    我的屏幕描述:

    <?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>
                <collectionDatasource id="cardSubTypeDs" class="com.tkbbank.client.entity.CardSubType" view="_local">
                <query>
                    <![CDATA[select s from demo$CardSubType s where s.cardType.id = :component$cardSubTypePicker.id]]>
                </query>
            </collectionDatasource>
        </dsContext>
    
        <dialogMode forceDialog="true" width="AUTO"/>
        <layout expand="windowActions" spacing="true">
            <fieldGroup id="fieldGroup" datasource="cardItemDs">
                <column width="500px">
    
                    <field id="cardType" caption="Тип документа">
                        <lookupPickerField id="cardTypePicker" optionsDatasource="cardTypeDs"/>
                    </field>
                    <field id="cardSubType" caption="Подтип документа">
                        <lookupPickerField id="cardSubTypePicker" optionsDatasource="cardSubTypeDs"/>
                    </field>
    
                    // Skipped
    

    我的屏幕控制器:

    public class CardItemEdit extends AbstractEditor<CardItem> {
    
        @Inject
        private Datasource<CardItem> cardItemDs;
    
        @Inject
        private Metadata metadata;
    
        @Inject
        private CollectionDatasource<CardSubType, UUID> cardSubTypeDs;
    
        @Inject
        private LookupPickerField cardTypePicker;
    
        @Override
        public void init(Map<String, Object> params) {
            CardItem cardItem = metadata.create(CardItem.class);
            cardItemDs.setItem(cardItem);
    
            cardTypePicker.addValueChangeListener(e -> cardSubTypeDs.refresh());
        }
    }
    

    实体 CardSubType :

    @NamePattern("Подтип входящего документа: %s |subtype")
    @Table(name = "DEMO_CARD_SUB_TYPE")
    @Entity(name = "demo$CardSubType")
    public class CardSubType extends StandardEntity {
        private static final long serialVersionUID = -3558412722346178348L;
    
        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "CARD_TYPE_ID")
        protected CardType cardType;
    
        // Skipped
    

    所以,我在 cardTypePicker

    enter image description here

    有什么问题吗?

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

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

    Mario David 回答了这个问题 here .

    谢谢你,马里奥!

    使用以下屏幕数据源,所有下拉列表都可以正常工作:

     <dsContext>
        <datasource id="cardItemDs" class="com.tkbbank.client.entity.CardItem" allowCommit="false" view="card-item-view"/>
            <collectionDatasource id="cardTypeDs" class="com.tkbbank.client.entity.CardType">
            <query>
                <![CDATA[select e from demo$CardType e]]>
            </query>
        </collectionDatasource>
            <collectionDatasource id="cardSubTypeDs" class="com.tkbbank.client.entity.CardSubType">
            <query>
                <![CDATA[select s from demo$CardSubType s where s.cardType.id = :ds$cardTypeDs]]>
            </query>
        </collectionDatasource>
    </dsContext>