I want to use datatable in primefaces with lazy loading feature. I tried to test the sample represented in demo page of primesfaces.
I tried many ways and searched from net but no related things were not found. Any help is appreciated... Thanks
My problem is to get this error:
SEVERE: Error Rendering View[/index.xhtml]
javax.el.PropertyNotFoundException: /index.xhtml @17,48 value="#{table.name}": Property 'name' not readable on type java.lang.String
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:104)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190)
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178)
at javax.faces.component.UIOutput.getValue(UIOutput.java:168)
at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:338)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:77)
at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:61)
at org.primefaces.component.datatable.DataTableRenderer.encodeTable(DataTableRenderer.java:544)
at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:441)
at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:239)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1613)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:380)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)
Codes used by this test project.
Code: Select all
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
</h:head>
<h:body>
<h:form>
<p:dataTable value="#{tableBean.lazyModel}" var="table" paginator="true" rows="10"
dynamic="true" lazy="true" paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}">
<p:column>
<f:facet name="header">
<h:outputText value="Model" />
</f:facet>
<h:outputText value="#{table.name}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Year" />
</f:facet>
<h:outputText value="#{table.id}" />
</p:column>
</p:dataTable>
</h:form>
</h:body>
</html>
Code: Select all
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import org.primefaces.model.LazyDataModel;
@ManagedBean
public class TableBean {
private List<Car> lazyCars;
private LazyDataModel<Car> lazyModel;
public TableBean() {
}
public List<Car> getLazyCars() {
return lazyCars;
}
public void setLazyCars(List<Car> lazyCars) {
this.lazyCars = lazyCars;
}
public LazyDataModel<Car> getLazyModel() {
if(lazyModel == null)
{
lazyModel = new LazyDataModel<Car>(100000000) {
/**
* Dummy implementation of loading a certain segment of data.
* In a real applicaiton, this method should access db and do a limit based query
*/
@Override
public List<Car> fetchLazyData(int first, int pageSize) {
lazyCars = new ArrayList<Car>();
populateLazyRandomCars(lazyCars, pageSize, first);
return lazyCars;
}
};
}
return lazyModel;
}
private void populateLazyRandomCars(List<Car> list, int size, int first) {
for(int i = 0 ; i < size ; i++) {
int offset = i + first;
list.add(new Car(offset, "Araba" + offset));
}
}
private int getRandomYear() {
return (int) (Math.random() * 50 + 1960);
}
}