Sto tentando di implementare il caricamento lazy all'interno della configurazione datatable del mio primefaces. Attualmente, questo funziona senza l'implementazione di caricamento lento, ma non ottengo dati nel datatable dopo aver implementato il caricamento lazy. Tuttavia, posso stampare la mia lista nel mio metodo LoadData per verificare che i dati vengano caricati nel mio elenco, ma sembra esserci un problema una volta che il mio LazyModel viene restituito e si tenta di caricare il datatable. Questo potrebbe essere solo qualcosa di semplice che sto trascurando. Qualsiasi aiuto è molto apprezzato!Primefaces Lazy Caricamento dati non disponibile
Ecco il mio codice della classe ScreenshotListProducer:
@ManagedBean
@RequestScoped
public class ScreenshotListProducer implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private EntityManager em;
private List<Screenshot> screenshots;
private LazyDataModel<Screenshot> lazyModel = null;
private int pageSize = 5;
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageSize() {
return pageSize;
}
@Produces
@Named
public List<Screenshot> getScreenshots() {
System.out.println("************* getting screenshots list **************");
return screenshots;
}
@PostConstruct
public void LoadData() {
lazyModel = new LazyDataModel<Screenshot>() {
private static final long serialVersionUID = 1L;
@Override
public List<Screenshot> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,String> filters) {
int start = first;
int end = first + pageSize;
try {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Screenshot> criteria = cb.createQuery(Screenshot.class);
Root<Screenshot> screenshot = criteria.from(Screenshot.class);
criteria.select(screenshot).orderBy(cb.asc(screenshot.get("time")));
TypedQuery<Screenshot> s = em.createQuery(criteria);
s.setMaxResults(end - start);
s.setFirstResult(start);
screenshots = s.getResultList();
System.out.println("************* lazy screenshot list created **************");
for (Screenshot lazylist : screenshots) {
System.out.println("id numbers in lazy list: " + lazylist.getId());
}
} catch (NullPointerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return screenshots;
}
};
}
public LazyDataModel<Screenshot> getLazyModel() {
return lazyModel;
}
Ecco la mia classe Screenshot:
@Entity
@XmlRootElement
@Table(name="Test2012", uniqueConstraints = @UniqueConstraint(columnNames = "id"))
public class Screenshot implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "id", columnDefinition="INT")
private Long id;
private Timestamp time;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Timestamp getTime() {
return time;
}
public void setTime(Timestamp time) {
this.time = time;
}
}
Ecco il mio codice xhtml:
<p:dataTable id="table1" var="scrshot" rowKey="#{scrshot.id}" value="#{screenshotListProducer.lazyModel}" paginator="true" rows="7" paginatorPosition="bottom"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="7,20,50,100" widgetVar="dataTable" currentPageReportTemplate="(Number of Records: {totalRecords})"
emptyMessage="No screenshot data found with given criteria" lazy="true" scrollable="true" draggableColumns="true" scrollHeight="217" style="width: 100%;">
<f:facet name="header">
<p:outputPanel>
<h:outputText value="Search all fields: "/>
<p:inputText id="globalFilter" onkeyup="dataTable.filter()"/>
</p:outputPanel>
</f:facet>
<p:column selectionMode="multiple"/>
<p:column id="time" headerText="Time" sortBy="#{scrshot.time}" filterBy="#{scrshot.time}" filterMatchMode="startsWith">
<h:outputText value="#{scrshot.time}"/>
</p:column>
<p:column id="id" headerText="ID" sortBy="#{scrshot.id}" filterBy="#{scrshot.id}" filterOptions="#{scrshot.id}" filterMatchMode="exact">
<h:outputText value="#{scrshot.id}"/>
</p:column>
</p:dataTable>
è possibile fornire il codice completo di lavoro lazing caricamento – spt