我有一個Wicket正在偵聽某個事件的組件(IEvent
)。如果這樣的事件到達,我想用改變後的模型重新渲染組件。頁面上沒有活動控件,如AjaxLink
,它可以觸發重新呈現。如何在事件接收後重新渲染Wicket組件
有沒有辦法刷新這種類型的組件?
我在想以某種方式觸發onEvent
方法中的AJAX請求,並將AjaxBehavior
添加到提到的組件中。但我不知道,如何觸發AJAX請求。
public class PersonPanel extends Panel implements Observer {
private WebMarkupContainer wrapper;
public PersonPanel(String id) {
super(id);
setDefaultModel(new CompoundPropertyModel<PersonInfo>(getModel()));
wrapper = new WebMarkupContainer("wrapper");
wrapper.setOutputMarkupId(true);
add(wrapper);
wrapper.add(new Label("personID"));
// some more content
}
private IModel<PersonInfo> getModel() {
return new LoadableDetachableModel<PersonInfo>() {
@Override
protected PersonInfo load() {
// model loading logic
}
};
}
@Override
public void onEvent(IEvent<?> event) {
logger.debug("\n Person Panel received an Event: " + event.getPayload());
// Re-rendering of "wrapper" should be triggered from here.
}
@Override
public void update(Observable observable, Object o) {
send(this, Broadcast.EXACT, "Observable cache has changed.");
}
}
是的,這是我的想法 - 但我如何創建'AjaxRequestTarget'? –
您在什麼條件下播出活動?通常這發生在一些動作方法中(比如'#onClick(AjaxRequestTarget)','#onUpdate(AjaxRequestTarget)'),所以你已經有了'target'。如果這不是一個Ajax請求,那麼你不需要將它添加到任何地方,因爲整個頁面將被重新渲染。 –
我已經更新了代碼片段 - 現在您可以看到更新方法,它實現了java.util.Observer接口。因此,事件從組件本身作爲對「Wicket-external」事件的反應進行廣播。剩下的唯一步驟就是刷新組件,而不用整頁重新加載。 –