2017-11-06 18 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 -Method입니다.

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를 클릭하면 다음 모두 활성으로 설정 될 것입니다 : 그래서 내 첫번째 생각은 다음과 같이 내 자신의 IndicatingAjaxFallbackLink, 뭔가를 위치 : implemeting했다. 또 다른 방법은 AttributeModifier을 사용하는 것이었지만 CSS가 링크를 활성화한다고 선언 할 수 있기 때문에 다시 실패했습니다. 성취하고자하는 것은 무엇입니까? 논문 번호 links은 많은 이미지를로드하는 다른 패널을 업데이트합니다. 그리고 처음에는 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()); 
} 

:

답변

2

당신은 활성 링크를 추적 할 공통의 ​​모델 인스턴스를 사용하는 사용자 지정 링크 클래스를 만들 수 있습니다 .