2013-12-15 59 views
0

我在我的Wicket 1.5应用程序的子面板上遇到了AjaxEventBehaviors问题。会发生什么是这些子面板上的事件行为导致页面刷新。例如:Panel2被添加到Panel1Panel1上的每个按钮都可以很好地工作,但不会在Panel2onEvent从不被调用,只是页面刷新)。Wicket ajaxeventbehavior在子面板中导致页面刷新

守则上的按键事件的行为:

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,并使其打印“你好”
  • 按下按钮,页面刷新,而不需要的onclick/onevent动作会发生。
  • 原因:无状态页面上的按钮重建整个页面。这意味着默认设置将被重新加载。因此,即使在执行按钮B之前,A也被恢复。显然,这会产生错误,在Wicket中这些错误会导致页面刷新。将按钮放在无状态的子面板上似乎是不可能的。
+0

试试 “点击”,而不是 “点击”,并设置'test.setOutputMarkupId(真);' –

回答

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

希望这有助于你太:)

相关问题