检查Wicket中哪个Button处于活动状态

时间:2017-11-06 16:45:22

标签: wicket wicket-6 wicket-7

我有ListView。这是populateItem - 方法:

@Override
protected void populateItem(ListItem<Test> test) {
    // TODO Auto-generated method stub
    Test t = test.getModelObject();
    IndicatingAjaxFallbackLink link = new IndicatingAjaxFallbackLink("categoryMenuItemLink", t)
    test.add(link)
}

这样生成HTML

<a>Test 1</a>
<a>Test 2</a>

对于我的应用程序,我需要跟踪哪个links处于活动状态。 所以我的第一个思想是实现我自己的IndicatingAjaxFallbackLink,类似这样:

public class MyLink extends IndicatingAjaxFallbackLink<String> {

private boolean isActive;

public CategoryAjaxLink(String id) {
    super(id);
    this.setOutputMarkupPlaceholderTag(true);

}

@Override
public void onClick(AjaxRequestTarget target) {
    this.isActive = true;
    // Load images into different panel...
}

但现在的问题是,如果我同时点击links,则两者都将设置为活动状态。 另一种方法是使用AttributeModifier,但它再次失败,因为我只能声明链接是由CSS激活的。 我想要完成什么?论文links将更新另一个加载大量图片的面板。并且第一个link始终处于活动状态,因此默认情况下会加载图像。通过单击第二个link,第二个链接将变为活动状态,并开始加载不同的图像。

但是,如何在link上创建链接时,如何保持populateItem处于活动状态?

1 个答案:

答案 0 :(得分:2)

您可以创建一个自定义链接类,该类使用通用的Model实例来跟踪活动链接:

public class MyLink extends IndicatingAjaxFallbackLink<String>
private final IModel<String> activeLink;    

public CategoryAjaxLink(String id, IModel<String> activeLink) {
    super(id);
    this.setOutputMarkupPlaceholderTag(true);
    this.activeLink = activeLink;
}

@Override
public void onClick(AjaxRequestTarget target) {
    activeLink.setObject(getId());
    // Load images into different panel...
}

public boolean isActive() {
    return getId().equals(activeLink.getObject());
}

正如我所说的那样,你必须为每个链接使用相同的模型实例。

相关问题