2014-10-30 44 views
2

我已经创建了一个复合行为 - 基本上两个AjaxFormComponentUpdatingBehaviors(onBlur和onKeyUp)。它可以在这里找到:http://tny.cz/0ff0ead2Wicket复合行为

当渲染已添加此行为的组件时,我收到一个异常,指出“[行为_未用此组件注册”。当在行为的onComponentTag()内调用blur.onComponentTag()方法时会发生异常。

有没有人有任何想法,为什么这是?我应该提到我正在使用Wicket 1.4.21。

感谢,

一个

+2

尝试更换'blur.bind(组件)'和'keyUp.bind(成分)'带'component.add(blur,keyUp)'。 – 2014-10-30 18:20:04

+0

太棒了!这工作。谢谢@MichaelZhavzharov。您是否想将您的评论转换为答案,以便我可以对其进行调整并将问题标记为已回答? – 2014-10-31 10:28:29

+0

好的,如你所愿:) – 2014-10-31 10:41:04

回答

1

在您的复合行为的#bind()方法调用另一个#bind()方法为您blurkeyUp,但是,正如@Sven已经提到,调用此方法不足以做的伎俩,因为它behaviors创建链接component,但component仍然不知道他们的任何事情。

当您拨打component.add(behaviors)时,有内部呼叫#bind()方法的每个行为。这就是你实际需要的。


因此,只需更换:

blur.bind(component); 
keyUp.bind(component); 

通过以下:

component.add (blur, keyUp); 
+1

嗯,我真的想给你们两个答案,但我首先看到了Michael的评论。我感谢你们两位。 – 2014-10-31 18:55:51

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()); 
    } 

正如迈克尔已经评论,您的包裹的行为必须被添加到组件,只需调用#bind()是不够的。