2013-03-04 2 views
10

Primeface datatable에 multisort를 구현하려고합니다. 우리는 Primeface v3.5를 사용하고 있습니다. SortMeta List 매개 변수를 사용하는 LazyLoadClass에 새로드 메서드를 만들었습니다.PrimeFaces multisort 데이터 테이블의 초기 정렬 순서

하지만 초기로드시 문제가 있습니다. 로드 메서드가 호출 될 때 List of SortMeta>는 null입니다. 나는 또한 데이터 테이블에 대해 초기 sortBy 및 sortOrder를 지정하지 않고 시도했다. 두 경우 모두 결과는 같습니다.

멀티 클래스를 지원하기 위해이 새로운 클래스 SortMeta가 있음을 알았 기 때문에 초기 정렬 필드와 순서를 지정하는 방법도 변경되었다고 생각됩니다. 그러나 차이점을 지적 할 수있는 곳은 어디에도 없습니다. 매뉴얼 3.5에는 차이점이 없습니다.

SortMeta 목록을 null로 가져 오는 이유는 무엇입니까? multisort가 Lazyload와 함께 사용되는 예제 코드의 모든 포인터는 무엇입니까?

+0

sortMeta의 목록을 sortBy에 제공해야합니다. –

+0

확인. 이전에 우리는 문자열의 이름 문자열을 제공하고 있었지만 지금은 이해할 수 있도록 콩의 List 개체에 바인드했습니다. 감사! 이것을 시도 할 것입니다. –

+0

@CagatayCivici

preSortOrder를'private void buildSortOrder() { 으로 만들었습니다. SortMeta sm1 = new SortMeta(); \t \t sm1.setSortField ("resolvedDateTime"); m1.setSortOrder (SortOrder.DESCENDING); preSortOrder.add (sm1); \t \t \t }'하지만 NPE가 DataTableRenderer의 방법은'encodeColumnHeader sortIcon = resolveDefaultSortIcon (columnSortByVe, meta.getColumn(). getValueExpression ("sortBy") meta.getSortOrder()로 액세스되고 UIColumn BCS 발생한다. 이름()); ' –

답변

18

나는 이것을 작동시킬 수 있었다.

기본적으로 SortMeta 개체에 UIColumn을 제공해야 작동 할 수 있습니다. 렌더링시의 초기 정렬에서, bean에서 컴포넌트를 찾아서 sortMeta에 할당해야했습니다. 다음은

는 @PostConstruct

 /* 
    * method to build initial sort order for multisort 
    */ 
    private void buildSortOrder() { 
     UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot(); 
     UIComponent column = viewRoot.findComponent("transDataTable:joinDateTime"); 

     SortMeta sm1 = new SortMeta(); 
     sm1.setSortBy((UIColumn)column); 
     sm1.setSortField("joinDateTime"); 
     sm1.setSortOrder(SortOrder.DESCENDING); 
     preSortOrder.add(sm1);   
    } 

I는이 작업을 수행하는 올바른 방법입니다 확실하지 오전에 내 콩 코드라고보기는 xhtml 여기

 <p:dataTable id="transDataTable" var="trans" 
     value="#{myBean.transModel}" paginator="true" rows="50" 
     paginatorAlwaysVisible="false" lazy="true" 
     sortMode="multiple" sortBy="#{myBean.preSortOrder}" 
     resizableColumns="true"> 

     <p:column headerText="User" sortBy="#{trans.user.name}" > 
      #{trans.user.name} 
     </p:column> 
     <p:column headerText="Company" sortBy="#{trans.companyName}"> 
      #{trans.companyName} 
     </p:column> 
     <p:column headerText="Join Date" id="joinDateTime" 
      sortBy="#{trans.joinDateTime}" > 
      <h:outputText value="#{trans.joinDateTime}" /> 
     </p:column> 
    </p:dataTable> 

에 내 코드이지만, 공장. 빈 코드에서 ID를 사용해야 할 때 사람들이 조심하지 않을 때 버그가 생길 수 있으므로 일반적으로 불편합니다.

빠른 힌트를 위해 @CagatayCivici에게 감사드립니다.

+1

죄송합니다. 전체 샘플을 제공 할 시간이 없으므로 팁만 제공 할 수 있습니다. 상세한 예제를 공유해 주셔서 감사합니다. –

관련 문제