【发布时间】:2013-12-15 21:30:24
【问题描述】:
我在 Wicket 1.5 应用程序的子面板上遇到了AjaxEventBehaviors 的一些问题。发生的情况是这些子面板上的事件行为会导致页面刷新。
示例:Panel2 添加到 Panel1。
Panel1 上的每个按钮都可以正常工作,但在 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