2017-11-06 10 views
0

私にはListViewがあります。どのボタンがWicketでアクティブになっているか確認してください

@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を追跡する必要がありますこれはpopulateItem方法 - です。 だから私の最初の思想はIndicatingAjaxFallbackLink自分をimplemetingた、このような何か:

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をクリックした場合、両方がアクティブに設定されるということです。 もう1つのアプローチは、AttributeModifierを使用することでしたが、リンクがCSSによってアクティブであることだけを宣言できるので、もう一度失敗しました。 私は何を達成したいですか?これらのlinksは、多数の画像を読み込む別のパネルを更新します。最初のlinkは常にアクティブなので、イメージはデフォルトで読み込まれます。 2番目のリンクをクリックすると、2番目のリンクがアクティブになり、異なるイメージの読み込みが開始されます。

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

答えて

2

あなたは、アクティブなリンクを追跡するための一般的なモデルのインスタンスを使用してカスタムリンクのクラスを作成することができます。

関連する問題