如何将行为添加到另一个内部的组件中添加到Wicket中该组件的行为

时间:2012-12-09 17:41:42

标签: wicket wicket-1.6

我想使用Apache Wicket向AjaxEventBehavior中的Component添加一个AttributeAppender。一个Behavior有一个getComponent()方法但是在构造函数中getComponent()obvioulsy返回null。

现在我将组件传递给AjaxEventBehavior的构造函数并且它正在工作,但这是实现我的目标的好方法..

这就是我正在做的事情:

AjaxTooltipBehavior:

public class AjaxTooltipBehavior extends AjaxEventBehavior {
      public AjaxTooltipBehaviour(String event, Component tooltippedComponent) {
           super(event);
           tooltippedComponent.add(new AttributeAppender("data-tooltip","wicketAjaxTooltip"));
      }    

      ...
}

这就是我使用它的方式:

 ...
 final WebMarkupContainer icon = new WebMarkupContainer("icon"); //a tooltiped icon
 icon2.add(new AjaxTooltipBehaviour("mouseover",icon2)

我问自己是否没有办法将AttributeAppender添加到组件而不将组件传递给AjaxTooltipBehavior。 有谁知道这是否可能在检票口或是否有更好的解决方案? 仅供参考:我正在使用wicket 1.6。

提前感谢您的支持! 罗尼

3 个答案:

答案 0 :(得分:2)

通常你会覆盖Behavior#onBind(Component),但这个方法在AbstractAjaxBehavior中是最终的。但它会调用onBind()并在那里使用getComponent()

@Override
protected void onBind() {
    super.onBind();
    getComponent().add(new AttributeAppender("data-tooltip","wicketAjaxTooltip"));
}

答案 1 :(得分:0)

因为您已从AbstractAjaxBehavior扩展(AjaxEventBehavior扩展AbstractAjaxBehavior),您应该获得对getComponent()的访问权限,这将为您提供附加行为的组件。

答案 2 :(得分:-1)

我覆盖Behavior#onConfigure(Component component)可能是最适合添加行为的方法,或者使用属于行为的组件执行其他操作。

@Override
protected void onConfigure(Component component) {
   super.onConfigure();
   component().add(new AttributeAppender("data-tooltip","wicketAjaxTooltip"));
}