2011-12-22 2 views
1

에 대해서만 null을 반환합니다. vaadin의 TreeTable을 사용하고 내 행에 대한 툴팁을 추가하려고합니다. 이것은 그들이해야한다고 말하지만 propertyId는 항상 null이므로 정확한 열을 얻을 수 없습니까? 트리에 항목을 추가 할 때 내가 항목 ID로 소스 오브젝트를 통과 한ItemDescription vaadin TreeTable 생성자는 열

private void init() { 
    setDataSource(); 
    addGeneratedColumn("title", new TitleColumnGenerator()); 
    addGeneratedColumn("description", new DescriptionGenerator()); 
    setColumnExpandRatios(); 
    setItemDescriptionGenerator(new TooltipGenerator()); 
} 

protected class TooltipGenerator implements ItemDescriptionGenerator{ 
     private static final long serialVersionUID = 1L; 

     @Override 
     public String generateDescription(Component source, Object itemId, Object propertyId) { 
      TaskRow taskRow = (TaskRow)itemId; 
      if("description".equals(propertyId)){ 
       return taskRow.getDescription(); 
      }else if("title".equals(propertyId)){ 
       return taskRow.getTitle(); 
      }else if("category".equals(propertyId)){ 
       return taskRow.getCategory().toString(); 
      }else if("operation".equals(propertyId)){ 
       return taskRow.getOperation().toString(); 
      }else if("resourcePointer".equals(propertyId)){ 
       return taskRow.getResourcePointer(); 
      }else if("taskState".equals(propertyId)){ 
       return taskRow.getTaskState().toString(); 
      } 
      return null; 
     }  
    } 
+0

까다로운 냄새가납니다.이 메시지는 부적절 할 수 있지만 어떤 종류의 데이터 컨테이너를 사용하고 있습니까? TaskRow 객체가 null이 아닌가? 그렇지 않으면 테이블이 잘 렌더링됩니까? generateDescription()을 호출하는 메소드를 디버깅 했습니까? – miq

+0

다른 모든 개체가 올바르게 가리키고 있습니다. 즉, 계층 적 컨테이너 인터페이스를 구현하는 자체 데이터 컨테이너를 사용하고 있습니다. 컨테이너는 다른 모든 방법으로 훌륭하게 작동합니다. – Marthin

+0

메소드'generateDescription'의 propertyId에 대한 JavaDoc은 '셀의 propertyId, 행 설명을 가져올 때 null'이라고 표시합니다. 이것이 관련 될 수 있습니까? 하지만 대체 솔루션이 있습니다. 각 열 생성기의 레이블에 설명을 설정하지 않습니까? – janhink

답변

1

: 그리고 네 i'v는) = 일식 디버거 aswell에서이 부분과 관련

코드를이를 실행합니다.

Node node = ...; 
Item item = tree.addItem(node); 

이것은 "node"객체를 id로 사용합니다. 그러면 generateDescription 메서드에서 itemId를 Node의 인스턴스로 캐스팅 할 수 있습니다.

public String generateDescription(Component source, Object itemId, Object propertyId) { 
    if (itemId instanceof Node) { 
     Node node = (Node) itemId; 
     ... 

아마도 가장 좋은 해결책은 아니지만 나에게 적합합니다. 그런 다음 다시 DataContainer를 사용하는 대신 트리에 직접 항목을 추가하고 있습니다.