2012-01-13 27 views
5

Tôi đang cố gắng triển khai bảng có tải chậm. Tôi nghĩ rằng tôi đã có tất cả các bước từ trang demo và tài liệu nhưng tôi luôn nhận được thông báo "Không tìm thấy bản ghi". Tôi nghĩ rằng tôi đã giảm mã để minimun ngôn luận, ít nhất phải có một bản ghi:Thủ tướng: Triển khai LazyDataModel

trang Bàn:

<h:form id="listaEmpresas"> 
<p:dataTable id="tablaEmpresas" value="#{empresasTableMB.lazyDataModel}" var="empresa"> 
        <p:column> 
         <f:facet name="header"> 
          <h:outputText value="#{msgs.empresa_tabla_nombre}"/> 
         </f:facet> 
         <h:outputText value="#{empresa.nombre} "/> 
        </p:column> 

</p:dataTable> 
</h:form> 

LazyDataModel:

@Override 
public List<Empresa> load(int first, int pageSize, String sortField, SortOrder so, Map<String, String> filters) { 
    List<Empresa> listaEmpresas = new ArrayList(); 
    Empresa e = new Empresa(); 
    e.setNombre("Company"); 
    listaEmpresas.add(e); 
    this.setRowCount(1); 
    return listaEmpresas; 
} 


@Override 
public void setRowIndex(int rowIndex) { 
    if (rowIndex == -1 || getPageSize() == 0) { 
     super.setRowIndex(-1); 
    } 
    else 
     super.setRowIndex(rowIndex % getPageSize()); 
} 

tôi phải ghi đè lên setRowIndex hoặc tôi nhận được một ngoại lệ "java.lang.ArithmeticException:/by zero". Tôi đang sử dụng các nguyên tố-3.1-SNAPSHOT, jsf 2.0.3 và tomcat 6.0. Hãy giúp tôi. Những gì tôi đang thiếu?

+0

Tại sao bạn sử dụng phiên bản PF cũ và chụp nhanh? Hãy thử phiên bản ổn định mới nhất. http://primefaces.org/downloads.html –

Trả lời

0

Bạn cũng cần triển khai LazyDataModel#getRowKeyLazyDataModel#getRowData.

Giả sử rằng bạn có một cái gì đó như:

class Empresa { 

    private long id; 
    private String nombre; 

    // getters and setters... 

} 

Sau đó:

  • getRowKey trả về id cho một đối tượng Empresa
  • getRowData được một đối tượng Empresa bởi id
class MyLazyDataModel { 

    // stuff you already have comes here... 

    public Empresa getRowData(String rowKey) { 
     return empresaRepository.getEmpresaById(Long.valueOf(rowKey)); 
    } 

    public Object getRowKey(Empresa empresa) { 
     return empresa.getId(); 
    } 

} 
+0

Thật không may là tôi đã rời công ty đó một thời gian trước vì vậy tôi không thể kiểm tra nó ngay bây giờ, nhưng cảm ơn bạn! –

2

Thêm lazy=true trong DataTable của bạn. Sau khi thêm dữ liệu này có thể gọi phương thức load() của bạn.

0

bạn không gọi phương thức tải. Đầu tiên hãy gọi phương thức tải trước khi khai báo bảng dữ liệu mặt chính.

0

bạn cần thêm trường private int rowCount; và sau đó trong giá trị thiết lập phương thức số load(...) của số bản ghi trong danh sách của bạn vào trường này (rowCount). mà không có điều này <p:dataTable ...> sẽ đạt được "Không tìm thấy bản ghi" và cũng có thể nếu bạn không chỉ định rows ="10" (ví dụ) thuộc tính, nó sẽ không hiển thị hàng!

Các vấn đề liên quan