检查哪个按钮在检票口中处于活动状态



我有一个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第二个链接将变为活动状态并开始加载不同的图像。

但是,当通过populateItem创建链接时,我如何保持哪个link处于活动状态?

您可以创建一个自定义链接类,该类使用公共模型实例来跟踪活动链接:

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

正如我所说,要完成这项工作,您必须为每个链接使用相同的模型实例。

最新更新