我想使用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答案 0 :(得分:1)
由于使用错误的组件而抛出NullPointerException。
使用AjaxButton或AjaxSubmitLink代替Button并实现方法onSubmit(AjaxRequestTarget)而不是方法onSubmit()。
<强>解释强>
只有在调用请求的AJAX时,AjaxRequestTarget才可用。 RequestCycle是一个线程本地单例,仅在AJAX请求的情况下包含AjaxRequestTarget对象,否则您使用的方法会返回null,因为它没有找到任何AjaxRequestTarget对象。
答案 1 :(得分:0)
为了获得AjaxRequestTarget
,您需要AjaxButton
或AjaxLink
,AjaxSubmitLink
等。
这些组件包含onClick(AjaxRequestTarget target)
或onSubmit(AjaxRequestTarget target)
等方法,您可以使用这些方法。
如果您正在处理输入字段,可以添加AjaxFormCompanentUpadingBehaviour
,它会为您提供AjaxRequestTarget
。