Button.onSubmit()中不存在AjaxRequestTarget

时间:2015-04-27 00:57:36

标签: java javascript jquery wicket

当我尝试使用方法Button.onSubmit()时,从RequestCycle给出的AjaxRequestTarget显然为null。

我想使用Ajax打开一个弹出窗口,但它会抛出NullPointerException。有没有办法在Wicket的onsubmit()函数中使用AjaxRequestTarget显示弹出窗口?

  protected void onSubmit() {
       if (trainingmode()){
          AjaxRequestTarget target =  RequestCycle.get().find(AjaxRequestTarget.class);

          MessageDialog dialog = new MessageDialog("dialog", "Notice", "Decision Matches "  ,
             DialogButtons.OK_CANCEL, DialogIcon.WARN) {

         public void onClose(  AjaxRequestTarget target, DialogButton button) {

         }
     };
     System.out.println("2Chainz");
     dialog.open(target);
          }

}

我在dialog.open(目标)中收到错误消息: 引起:java.lang.NullPointerException     在com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog.onOpen(MessageDialog.java:170)     在com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog.open(A

我正在尝试弹出一个AjaxRequestTarget模式窗口但是我无法从onsubmit()

中访问AjaxRequestTarget

2 个答案:

答案 0 :(得分:1)

由于使用错误的组件而抛出NullPointerException。

使用AjaxButtonAjaxSubmitLink代替Button并实现方法onSubmit(AjaxRequestTarget)而不是方法onSubmit()。

<强>解释

只有在调用请求的AJAX时,

AjaxRequestTarget才可用。 RequestCycle是一个线程本地单例,仅在AJAX请求的情况下包含AjaxRequestTarget对象,否则您使用的方法会返回null,因为它没有找到任何AjaxRequestTarget对象。

答案 1 :(得分:0)

为了获得AjaxRequestTarget,您需要AjaxButtonAjaxLinkAjaxSubmitLink等。

这些组件包含onClick(AjaxRequestTarget target)onSubmit(AjaxRequestTarget target)等方法,您可以使用这些方法。

如果您正在处理输入字段,可以添加AjaxFormCompanentUpadingBehaviour,它会为您提供AjaxRequestTarget