Wicket-为什么AjaxRequestTarget对象仅在onUpdate方法中可用?

Wicket-为什么AjaxRequestTarget对象仅在onUpdate方法中可用?,ajax,components,wicket,behavior,Ajax,Components,Wicket,Behavior,我想要一个关于wicket上AjaxRequestTarget的理论解释。谈论行为:要创建自己的方法,必须重写onUpdate方法,并且可以重写其他方法,如OneEvent、onBind等。。但为什么AjaxRequestTarget对象仅在onUpdate方法中可用 我希望在其他方法中使用它,特别是在OneEvent中,因为我希望验证表单组件。在我的测试中,onUpdate方法并没有按我所希望的那样工作。。仅当模型更改时才调用onUpdate with focusout事件。。。例如,当我填充

我想要一个关于wicket上AjaxRequestTarget的理论解释。谈论行为:要创建自己的方法,必须重写onUpdate方法,并且可以重写其他方法,如OneEvent、onBind等。。但为什么AjaxRequestTarget对象仅在onUpdate方法中可用

我希望在其他方法中使用它,特别是在OneEvent中,因为我希望验证表单组件。在我的测试中,onUpdate方法并没有按我所希望的那样工作。。仅当模型更改时才调用onUpdate with focusout事件。。。例如,当我填充一个文本字段时调用它,但当它再次为空时就不会调用它

OneEvent方法在这两个时刻都被调用,但我无法更新其他组件(如标签)来显示该字段的反馈消息,因为AjaxRequestTarget在该字段上不可用。

只有在发出Ajax请求时才调用AjaxFormComponentUpdateingBehaviorUpdate

只有在发出Ajax请求时才会调用AjaxEventBehaviorNevent

ComponentEvent在其他组件调用ComponentsendSink、Broadcast和Payload时被调用。这可能发生在Ajax和普通/非Ajax请求中。因此,API中没有使用AjaxRequestTarget

通常,调用方将AjaxRequestTarget作为有效负载的一部分进行传递,以防这是在Ajax请求中完成的。这样,覆盖ComponentEvent的组件的接收器可以在需要时使用它:

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.findAjaxRequestTarget.class。如果它是非空的,那么这是一个Ajax请求,您可以向目标添加组件、pre/append JavaScript等。

理解这些概念会让我对该框架感到更舒服。谢谢,你是一个真正的Wicket guruBut你能告诉我更多关于有效载荷的信息吗?在这种情况下是什么?为什么我必须检查它的实例类型?我不想提出一个新问题,因为这些疑问来自您的答案。请查阅文档: