【问题标题】:Wicket - Init a Component with Loadable Detachable Model on click eventWicket - 在点击事件时使用可加载的可拆卸模型初始化组件
【发布时间】:2019-04-29 12:41:59
【问题描述】:

我在 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) -> {

            //

        });

子面板

 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】:

    如果您想避免组件渲染,您可以尝试隐藏您的子面板并在您单击 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);
        });
    

    【讨论】:

    • 恐怕不能解决我的问题。我只想在单击按钮后调用方法getData。是否可以在 onClick 事件中添加子面板或更好,在构造函数中将 null 作为模型分配给子面板,然后单击将模型分配给它并重新渲染子面板?
    • 那么你应该使用 LambdaModel 而不是 LoadableDetachableModel。我已经用 LambdaModel 更新了我的答案。
    • 顺便说一句,LoadableDetachableModel.of 应该创建一个模型,只在需要时调用 this::getData。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    相关资源
    最近更新 更多