Wicket ajaxeventbehavior导致子面板中的页面刷新

时间:2013-12-15 21:30:24

标签: java ajax events wicket stateless

我在Wicket 1.5应用程序的子面板上遇到AjaxEventBehaviors的麻烦。会发生什么是这些子面板上的事件行为导致页面刷新。

示例:Panel2已添加到Panel1Panel1上的每个按钮都可以正常工作,但Panel2上没有按钮(onEvent永远不会被调用,只是页面刷新)。

按钮上的事件行为代码:

WebMarkupContainer test = new WebMarkupContainer("test");

test.add(new StatelessAjaxEventBehavior("onclick")
    {
        @Override
        protected void onEvent(AjaxRequestTarget target)
        {
            LOG.info("I am clicked...");
            if (callback != null)
            {
                callback.call(target);
            }
        }

        @Override
        protected PageParameters getPageParameters()
        {
            return getPage().getPageParameters();
        }
    });

有人知道为什么页面会刷新,并且 - 同样重要 - 如何阻止它?

提前致谢

UPDATE
谢谢你的反应。但是,它仍然无效。为了更好地描述这种情况,我添加了一个可重现的路径:

  • 将面板添加到页面
  • 向所述面板添加两个子面板,称为A和B,并使其成为默认
  • 在主面板上添加按钮,并将其替换为B替换
  • 在B上添加一个按钮并打印'hello'
  • 按下按钮,页面刷新将不会执行所需的onclick / onevent操作。
  • 原因:无状态页面上的按钮会重建整个页面。这意味着将重新加载默认设置。因此,即使在执行按钮B之前,也恢复了A.显然,这会产生错误,而在Wicket中,这些错误将导致页面刷新。在无状态子面板上放置按钮似乎是不可能的。

1 个答案:

答案 0 :(得分:0)

您可以在生成事件的组件中使用此代码的代码,无论它在何处附加(在您的案例按钮中)

this.send(getPage(), Broadcast.DEPTH, "onClick");

接收活动的页面或组件

public void onEvent(IEvent<?> event) {
    IEventSource source = event.getSource();
    Component sourceComponent = (Component) source;
    String componentId = sourceComponent.getId();
    LOG.debug("Component id is " + componentId);

    if ((componentId == "homeLink") 
            || (componentId == "cancelLink")
            || (componentId == "logoutLink")) 
        LOG.debug("EVENT TRIGERRED...!");
}

希望这也有助于你:)