我有一个面板(比如AlertPanel
),当listView呈现时需要刷新某些条件。
我正在考虑更新listview的AlertPanel
生命周期方法中的onBeforeRender()
。
我试图像这样覆盖onBeforeRender() -
@Override
protected void onBeforeRender() {
super.onBeforeRender();
// update alert panel with some API of Component here
// I can get panel object like this 'this.getPage().get("alertPanel");'
}
一旦我this.getPage().get("alertPanel")
,我就不知道要调用org.apache.wicket.markup.html.panel.Panel
的API,以便我可以刷新/重新绘制AlertPanel
答案 0 :(得分:1)
如果渲染已经开始(并且它似乎有 - onBeforeRender())那么你将无法替换任何组件。
您应该将逻辑移至ACTION阶段,例如onClick(),onSubmit()等。在这种动作方法中广播一个事件:send(getPage(), Broadcast.DEPTH, new SomeCustomEvent())
。然后,在AlertPanel的父级中,您应该覆盖#onEvent(IEvent),当事件有效负载为SomeCustomEvent
时,则进行替换。
欲了解更多信息,请阅读:https://ci.apache.org/projects/wicket/guide/7.x/single.html#_wicket_events_infrastructure
答案 1 :(得分:0)
有两种方法: 1)复杂的一个:使用听众 2)或使用方法覆盖,如下所示:
AlertPanel alertPanel = new AlertPanel();
alertPanel.setOutputMarkupId(true);
ListView list = new MyListView(){
@Override
protected onMyEvent(AjaxRequestTarget target){
target.add(alertPanel);
}
}
page.add(alertPanel,list);
MyListView的