2012-01-13 14 views
5

Sto cercando di implementare una tabella con caricamento lazy. Penso di aver ottenuto tutti i passaggi dalla pagina demo e dalla documentazione, ma ottengo sempre un messaggio "Nessun record trovato". Penso di aver ridotto il codice per minimun espressione, almeno ci dovrebbe essere un record:Primefaces: Implement LazyDataModel

pagina Tabelle:

<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()); 
} 

devo ignorare setRowIndex o ottengo una eccezione "java.lang.ArithmeticException:/per zero". Sto usando primefaces-3.1-SNAPSHOT, jsf 2.0.3 e tomcat 6.0. Per favore aiuto. Cosa mi manca?

+0

Perché stai utilizzando la versione PF così vecchia e istantanea? Prova l'ultima versione stabile. http://primefaces.org/downloads.html –

risposta

0

È necessario implementare anche LazyDataModel#getRowKey e LazyDataModel#getRowData.

Si supponga di avere qualcosa di simile:

class Empresa { 

    private long id; 
    private String nombre; 

    // getters and setters... 

} 

Poi:

  • getRowKey restituisce l'id di un oggetto Empresa
  • getRowData Ottiene un oggetto Empresa da 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

Purtroppo ho lasciato l'azienda qualche tempo fa, quindi non posso testarlo ora, ma grazie! –

2

Aggiungi lazy=true nel vostro dataTable. Dopo aver aggiunto questo datatable è in grado di chiamare il tuo metodo load().

0

non si sta chiamando il metodo di caricamento. Prima si chiama il metodo di caricamento prima della dichiarazione della tabella di dati della faccia primaria.

0

è necessario aggiungere il campo private int rowCount; e poi nel vostro valore impostato load(...) metodo del numero di record nella vostra lista di questo campo (rowCount). senza questa cosa <p:dataTable ...> otterrà "Nessun record trovato" e anche se non si specifica l'attributo rows ="10" (ad esempio), non eseguirà il rendering delle righe!