为什么使用Behavior渲染textField需要很长时间

时间:2014-03-17 09:14:28

标签: java wicket

在我的应用程序中,我有大约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");
};

1 个答案:

答案 0 :(得分:0)

这需要很长时间,因为每个TextField都会添加一行javascript(使用AjaxFormComponentUpdatingBehavior)。

AjaxEventBehavior我遇到了一些问题。我已在父级上实现了一个自定义行为,用于检查导致该事件的子级。这会显着缩短渲染时间,也缩短浏览器加载时间。

我认为可以通过覆盖AjaxFormComponentUpdatingBehavior并获取正确的孩子onEvent来为FormComponent做类似的事情。 FormComponent需要setOutputMarkupId(true),您需要一些cutom javascript才能将id传递给行为。