Wicket - 在点击事件上启动具有可装载可拆卸模型的组件

问题描述 投票:0回答:1

我在Panel的构造函数中添加了ChildPanel。当Panel加载子面板时,将使用getData()返回的数据进行渲染。下面是代码。

面板

public Panel(String aId, IModel<String> model)
    {

        super(aId);

        this.model = model;
        childPanel = new ChildPanel(MID, LoadableDetachableModel.of(this::getData));

        childPanel.setOutputMarkupId(true);
        add(childPanel);

    }
LambdaAjaxButton button = new LambdaAjaxButton("button",
        (_target, _form) -> {

            //

        });

ChildPanel

 public ChildPanel(String aId, LoadableDetachableModel<String> loadableDetachableModel)

    {

        super(aId);

        childModel = loadableDetachableModel;

        component = new WebMarkupContainer(MID_COMPONENT_CONTAINER);
        component.setOutputMarkupId(true);
        add(component);

    }

我想这样做,ChildPanel只在我点击一个按钮时呈现,而且从未出现过。我如何在onClick事件中定义这样的东西?它也不能在初始化时渲染。

java model wicket wicketstuff
1个回答
0
投票

如果您想避免组件渲染,可以尝试隐藏子面板,并在单击AJAX按钮时使其可见。您还应该使用LambdaModel而不是LoadableDetachableModel来懒惰地调用getData。像这样的东西:

public Panel(String aId, IModel<String> model)
{

    super(aId);

    this.model = model;
    childPanel = new ChildPanel(MID, LambdaModel.of(this::getData));
    childPanel.setVisible(false);


    childPanel.setOutputMarkupPlaceholderTag​(true);
    add(childPanel);

}
LambdaAjaxButton button = new LambdaAjaxButton("button",
    (_target, _form) -> {

        childPanel.setVisible(true);
        _target.add(childPanel);
    });
© www.soinside.com 2019 - 2024. All rights reserved.