2013-12-15 28 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...!"); 
} 

希望這有助於你太:)