Wicket - 为什么 AjaxRequestTarget 对象仅在 onUpdate 方法中可用?
Wicket - why AjaxRequestTarget object is available only in onUpdate method?
我想要关于 wicket 上的 AjaxRequestTarget 的理论解释。谈论行为:要创建您自己的行为,您 必须 覆盖 onUpdate 方法,并且 可以 覆盖其他方法,如 onEvent、onBind 等。但是为什么 AjaxRequestTarget 对象仅在 onUpdate 方法中可用?
我想在其他方法中使用它(特别是在 onEvent() 中),因为我想验证表单组件。在我的测试中,onUpdate 方法无法按我想要的那样工作.. onUpdate(带有 focusout 事件)仅在模型更改时被调用...因此在我填充 TextField 时调用它,例如,但不是当它再次为空时..
onEvent 方法在这两个时刻都被调用,但我无法更新其他组件(例如用于显示对该字段的反馈消息的标签),因为 AjaxRequestTarget 在其上不可用。
AjaxFormComponentUpdatingBehavior#onUpdate()
仅在 发出 Ajax 请求时被调用 !
AjaxEventBehavior#onEvent()
仅在 发出 Ajax 请求时被调用 !
Component#onEvent()
在某些(其他,大部分时间)组件调用 Component#send(Sink, Broadcast, Payload)
时被调用。这可能发生在 Ajax 和 normal/non-Ajax 请求中。因此 AjaxRequestTarget
不用于 API.
通常 AjaxRequestTarget
由调用者作为有效负载的一部分传递,以防在 Ajax 请求中完成。这样接收器(覆盖 Component#onEvent()
的组件)可以在需要时使用它:
Caller.java:
send(getPage(), Broadcast.BREADTH, new MySpecialPayload(target));
Receiver.java:
@Override public void onEvent(IEvent event) {
Object payload = event.getPayload();
if (payload instanceOf MySpecialPayload) {
MySpecialPayload mySpecialPayload = (MySpecialPayload) payload;
if (doSomethingWith(mySpecialPayload) {
AjaxRequestTarget target = mySpecialPayload.getTarget();
target.add(this);
}
}
}
从任何地方获取对AjaxRequestTarget 的引用的另一种方法是:RequestCycle.get().find(AjaxRequestTarget.class)
。如果它非空,那么这是一个 Ajax 请求,您可以向目标添加组件,pre/append JavaScript,等等
我想要关于 wicket 上的 AjaxRequestTarget 的理论解释。谈论行为:要创建您自己的行为,您 必须 覆盖 onUpdate 方法,并且 可以 覆盖其他方法,如 onEvent、onBind 等。但是为什么 AjaxRequestTarget 对象仅在 onUpdate 方法中可用?
我想在其他方法中使用它(特别是在 onEvent() 中),因为我想验证表单组件。在我的测试中,onUpdate 方法无法按我想要的那样工作.. onUpdate(带有 focusout 事件)仅在模型更改时被调用...因此在我填充 TextField 时调用它,例如,但不是当它再次为空时..
onEvent 方法在这两个时刻都被调用,但我无法更新其他组件(例如用于显示对该字段的反馈消息的标签),因为 AjaxRequestTarget 在其上不可用。
AjaxFormComponentUpdatingBehavior#onUpdate()
仅在 发出 Ajax 请求时被调用 !
AjaxEventBehavior#onEvent()
仅在 发出 Ajax 请求时被调用 !
Component#onEvent()
在某些(其他,大部分时间)组件调用 Component#send(Sink, Broadcast, Payload)
时被调用。这可能发生在 Ajax 和 normal/non-Ajax 请求中。因此 AjaxRequestTarget
不用于 API.
通常 AjaxRequestTarget
由调用者作为有效负载的一部分传递,以防在 Ajax 请求中完成。这样接收器(覆盖 Component#onEvent()
的组件)可以在需要时使用它:
Caller.java:
send(getPage(), Broadcast.BREADTH, new MySpecialPayload(target));
Receiver.java:
@Override public void onEvent(IEvent event) {
Object payload = event.getPayload();
if (payload instanceOf MySpecialPayload) {
MySpecialPayload mySpecialPayload = (MySpecialPayload) payload;
if (doSomethingWith(mySpecialPayload) {
AjaxRequestTarget target = mySpecialPayload.getTarget();
target.add(this);
}
}
}
从任何地方获取对AjaxRequestTarget 的引用的另一种方法是:RequestCycle.get().find(AjaxRequestTarget.class)
。如果它非空,那么这是一个 Ajax 请求,您可以向目标添加组件,pre/append JavaScript,等等