List视图怎样向Detail视图传递参数

在List视图中点击create或edit按钮时,如何向Detail视图传递参数?

list_createlist_edit 都有一个 QueryParametersProvider:

    @Install(to = "ordersDataGrid.create", subject = "queryParametersProvider")
    private QueryParameters ordersDataGridCreateQueryParametersProvider() {
        return QueryParameters.of("name","New name");
    }

    @Install(to = "ordersDataGrid.edit", subject = "queryParametersProvider")
    private QueryParameters ordersDataGridEditQueryParametersProvider() {
        return QueryParameters.of("name","Edited name");
    }

然后,再 detail 页面的 QueryParametersChangeEvent 中可以拿到query param,

public class OrderDetailView extends StandardDetailView<Order> {

    private String name;

    @Subscribe
    public void onQueryParametersChange(final QueryParametersChangeEvent event) {
        var parameters = event.getQueryParameters().getParameters();
        name = parameters.get("name").get(0);
    }

    @Subscribe
    public void onInitEntity(final InitEntityEvent<Order> event) {
        event.getEntity().setName(name);
    }

    @Subscribe
    public void onBeforeShow(final BeforeShowEvent event) {
        getEditedEntity().setName(name);
    }
}

点击create按钮的时候,QueryParametersProvider没有调用
image

newEntitySupplier被调用了,但queryParametersProvider没有被调用
image
image

Detail视图的openMode是DIALOG

对,是这个原因,dialog 模式时,浏览器的地址不会变化。这时只能通过 newEntitySupplier 传信息了。

或者自己写打开dialog弹窗的代码:打开视图 :: Jmix 文档

这个传递参数能传递实体类型的嘛

url中肯定不行吧,可以传实体id,在target页面再加载实体。或者做一个全局的变量缓存之类的。

好的!

DIALOG模式下,通过 newEntitySupplier确实可以传递到Detail视图,但是还有一个问题,在Detail视图中,有一个EntityPicker(选择上级单位),又要通过dialog弹出List视图,这时候怎么再把这个type参数传到弹出窗口呢?弹出窗口list要用这个参数作为loader的查询参数

请参考这个帖子:https://forum.jmix.io/t/parameter-in-entity-lookup/3345/3?u=hanbing.yin