【问题标题】:Wicket ajaxeventbehavior causes page refresh in subpanelsWicket ajaxeventbehavior 导致子面板中的页面刷新
【发布时间】:2013-12-15 21:30:24
【问题描述】:

我在 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();
        }
    });

有人知道页面刷新的原因吗?同样重要的是,我该如何阻止它?

提前致谢

更新
谢谢你的反应。但是,它仍然不起作用。为了更好地描述这种情况,我添加了一条可重现的路径:

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

【问题讨论】:

  • 尝试“click”而不是“onclick”并设置test.setOutputMarkupId(true);

标签: java ajax events wicket stateless


【解决方案1】:

您可以在产生事件的组件中使用这种代码和平,无论它附加在哪里(在您的案例按钮中)

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...!");
}

希望这对你也有帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-14
    • 2013-04-15
    • 1970-01-01
    • 2016-04-30
    • 2014-09-15
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    相关资源
    最近更新 更多