2011-03-24 3 views
0

MyFaces을 사용하여 페이지 매김되고 정렬 가능한 데이터 테이블을 만들려고합니다. 분류 작업은 정상적으로 작동합니다. 열 머리글을 클릭하면 열을 기반으로 데이터가 정렬됩니다. 또한 페이지 매김은 대부분 잘 작동합니다. 데이터 테이블은 페이지 당 몇 가지 항목으로 적절하게 분할됩니다. 또한 사용자가 페이지 당 표시되는 항목의 수를 변경할 수있게하려고합니다. 다시 한 번, 이것은 모든 항목을 한 페이지에 표시하기 전까지는 작동하는 것 같습니다. 이 reference (또한 here)에 따르면 tomahawk의 모든 행을 페이지 매김, 정렬 가능 데이터 테이블

, 당신은 "행" t의 속성을 설정 한 경우 : 데이터 테이블이 "0"이 테이블의 나머지 행을 표시 할 수 있습니다. 나는 백업 빈의 속성을 사용하여 페이지 당 항목 수를 설정하기 위해 노력하고있어

javax.faces.FacesException - You need to set a value to the 'rows' attribute of component 'myComponent' 

: 그러나, 나는이 때, 나는이 메시지를 포함하는 예외를 얻을. 내 t : 데이터 테이블은 다음과 같습니다

<t:dataTable id="myComponent" var="cur" 
    value="#{backingBean.list}" sortAscending="#{backingBean.ascending}" 
    sortColumn="#{backingBean.sortColumn}" sortable="true" 
    styleClass="myClass" rowClasses="oddRow,evenRow" 
    rows="#{backingBean.itemsPerPage}" preserveDataModel="false"> 
    <!-- data here --> 
</t:datatable> 

을 나중에, 나는 t이 : dataScroller 매김 제어 : selectOneMenu에 : 그런 다음

<t:dataScroller id="pageNavigation" for="myComponent" 
    paginatorActiveColumnStyle="font-weight:bold;" 
    renderFacetsIfSinglePage="false" 
    binding="#{backingBean.scroller}" 
    paginator="true" > 
    <!-- facets here --> 
</t:dataScroller> 

을, 나는 시간이 페이지 당 항목 수를 선택하십시오.

<h:selectOneMenu id="myScroller" 
    value="#{backingBean.itemsPerPage}" 
    required="true" onchange="this.form.submit();" 
    valueChangeListener="#{backingBean.updateItemsPerPage}"> 
    <f:selectItems value="#{backingBean.itemsPerPageArray}" /> 
</h:selectOneMenu> 

내 백킹 빈 모양 이 같은의 뭔가 : 나는 시간에서 "모든"항목을 선택하면

public class BackingBean { 

    private boolean ascending; 
    private Long itemsPerPage; 
    private String sortColumn; 
    private ArrayList<SelectItem> itemsPerPageArray; 
    private ArrayList<SomeObject> list; // data for table 
    private HtmlDataScroller scroller; 

    // constructors, getters, setters, and other stuff here 

    public void updateItemsPerPage(ValueChangeEvent valueChangeEvent) { 
     itemsPerPage = (Long) valueChangeEvent.getNewValue(); 
     resetScrollerIndex(); 
    } 

    private void resetScrollerIndex() { 
     if (scroller!=null && scroller.isPaginator()) 
      scroller.getUIData().setFirst(0); 
    } 

    // called in constructor 
    private void constructItemsPerPageArray() { 
     itemsPerPageArray = new ArrayList<SelectItem>(); 
     itemsPerPageArray.add(new SelectItem(new Long(10), "10")); 
     itemsPerPageArray.add(new SelectItem(new Long(50), "50")); 
     itemsPerPageArray.add(new SelectItem(new Long(100), "100")); 
     itemsPerPageArray.add(new SelectItem(new Long(0), "All")); 
    } 
} 

은, 요약하면 : selectOneMenu, 나는 위에서 언급 한 예외를 얻을. 바라건대, 나는 적절한 수준의 세부 사항을 포함 시켰습니다. 감사!

답변

0

좋아, 난 대답 ...

나는 updateItemsPerPage 방법에서 첫 번째 줄을 제거하면

이 문제가 해결을 찾은 것 같아요. 그것은 내가 그 시도했다고 생각

public void updateItemsPerPage(ValueChangeEvent valueChangeEvent) { 
    resetScrollerIndex(); 
} 

...

: 같은 방법은 지금 보이는
관련 문제