我创建了一个复合行为 - 基本上是两个AjaxFormComponentUpdatingBehaviors(onBlur和onKeyUp)。它可以在这里找到:http://tny.cz/0ff0ead2
当渲染已添加此行为的组件时,我得到一个异常,指出“[行为_未在此组件中注册”]。从行为blur.onComponentTag()
中调用onComponentTag()
方法时会发生异常。
有谁知道为什么会这样?我应该提一下,我正在使用Wicket 1.4.21。
谢谢,
A
答案 0 :(得分:2)
异常来自RequestCycle#urlFor():
public final CharSequence urlFor(final Component component, final IBehavior behaviour,
final RequestListenerInterface listener)
{
int index = component.getBehaviorsRawList().indexOf(behaviour);
if (index == -1)
{
throw new IllegalArgumentException("Behavior " + this +
" was not registered with this component: " + component.toString());
}
正如Michael已经评论过的那样,你的包装行为必须添加到组件中,只是调用#bind()是不够的。
答案 1 :(得分:1)
在您的复合行为的#bind()
方法中,您为#bind()
和blur
调用了另一种keyUp
方法,但正如@Sven已经提到的那样,调用此方法方法不足以做到这一点,因为它为component
创建了behaviors
的链接,但component
仍然不了解它们。
当您致电component.add(behaviors)
时,每个行为都会内部调用#bind()
个方法。这就是你真正需要的。
所以,只需替换:
blur.bind(component);
keyUp.bind(component);
通过以下方式:
component.add (blur, keyUp);