我要在Panel的构造函数中添加ChildPanel。面板加载时,子面板将使用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事件中定义此类内容?另外,它不得在初始化时呈现。
答案 0 :(得分: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);
});