2013-03-28 1 views
2

dataTabledataTable 안에 사용하고 있습니다. dataExporter을 사용하여 (어떤 형식 으로든) 내보낼 때 inner-dataTable 값 대신 "[email protected]"과 같은 형식이 표시됩니다.Primefaces dataExporter 및 중첩 데이터 테이블

한계는 dataExporter입니까? 이 기능을 구현하려면 dataExporter을 사용해야합니까? 대안이 있습니까?

+2

'p : dataExporter>와 같은 모양은 JSF (이것은 PrimeFaces 포함) 구성 요소를 내보내는 방법을 알지 못합니다. 이는 지금까지의 정상적인 동작이며, 그렇습니다. 유사한 상황을 처리하는 방법을 설명하는 [p : dataExporter는 p : cellEditor를 인식하지 못합니다.] (http://stackoverflow.com/a/14413932/1065197)를 읽으십시오. –

답변

1

이것은 dataExporter의 제한 사항입니다. 이렇게하려면 자신의 수출자를 만들어야합니다. 나는 Export 클래스 (모든 커스텀 익스포트 클래스의 수퍼 클래스)에서 메소드 exportValue을 오버라이드 (override)하는 것이 가장 좋은 방법이라고 생각한다. 여기서 값이 HtmlCommandLink 또는 ValueHolder이 아닌 경우 toString()이 사용되므로이 값이 인쇄 된 것을 볼 수 있습니다. 또한 내보내기를 위해 사용자 정의 클래스를 인스턴스화하는 액션 리스너를 만들어야합니다.

1

내 외측 DataTable 단지 하나의 열을 가지며, 각 행 I이 방법에 PDFExporter 드리고 서브 DataTable이므로 :

document export이 방법에 의해 생성
@Override 
    protected String exportValue(FacesContext context, UIComponent component) { 
     if (component instanceof DataTable) { 
      DataTable tab = (DataTable) component; 
      try { 
       document.add(exportPDFTable(context, tab, false, false, "UTF-8")); 
      } catch (DocumentException ex) { 
       Logger.getLogger(ExtendedPDFExporter.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      return "";  
     else { 
      return super.exportValue(context, component); 
     } 
    } 

.

이제는 각 하위 DataTable이 동적 열을 사용하며 내 보낸 PDF의 해당 열에 대해서는 각 하위 DataTable에 복제 된 첫 번째 하위 DataTable의 값이 있습니다. 이것에 대한 아이디어가 있으십니까?