在我的应用程序中,我有大约100行的listView。每行包含带有行为的textField。问题是渲染此页面需要太长时间大约2秒。当我删除此行为时,它只需要几毫秒。我的问题是为什么需要这么长时间,有没有选择如何让它更快?
add(new ListView<PlayOffGame>("games") {
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(final ListItem<Game> listItem) {
listItem.add(new TextField<String>("results").add(new AjaxFormComponentUpdatingBehavior("onchange") {
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
// do something
}
}));
}
});
更新
wicket版本:1.5.9
rendering = method onRender:
@Override
protected void onRender() {
logger.debug("Render start");
long time = System.currentTimeMillis();
super.onRender();
time = System.currentTimeMillis() - time;
logger.debug("Render: " + time + " ms");
};
答案 0 :(得分:0)
这需要很长时间,因为每个TextField
都会添加一行javascript(使用AjaxFormComponentUpdatingBehavior
)。
AjaxEventBehavior
我遇到了一些问题。我已在父级上实现了一个自定义行为,用于检查导致该事件的子级。这会显着缩短渲染时间,也缩短浏览器加载时间。
我认为可以通过覆盖AjaxFormComponentUpdatingBehavior
并获取正确的孩子onEvent
来为FormComponent
做类似的事情。 FormComponent
需要setOutputMarkupId(true)
,您需要一些cutom javascript才能将id
传递给行为。