目前我正在玩JSF,我有一个数据表,值将被加载时,有史以来搜索过滤器已经完成,向前移动我有一个导出按钮,导出数据为xls格式。在这种情况下数据被导出。类演员异常JSF
但是,当没有搜索完成,数据表是空的只有列标题,并通过点击导出图标。我收到以下异常,这里是堆栈跟踪和图像连接参考
Apr 21, 2017 4:37:24 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute
WARNING: javax.faces.model.ListDataModel cannot be cast to org.primefaces.model.LazyDataModel
java.lang.ClassCastException: javax.faces.model.ListDataModel cannot be cast to org.primefaces.model.LazyDataModel
at org.primefaces.component.datatable.DataTable.clearLazyCache(DataTable.java:964)
at org.primefaces.component.export.Exporter.exportAll(Exporter.java:224)
at org.primefaces.component.export.ExcelExporter.export(ExcelExporter.java:59)
at org.primefaces.component.export.DataExporter.processAction(DataExporter.java:97)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:105)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.ppts.setting.SessionFilter.doFilter(SessionFilter.java:38)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1527)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1484)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Apr 21, 2017 4:37:24 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/GEO_DM] threw exception [javax.faces.model.ListDataModel cannot be cast to org.primefaces.model.LazyDataModel] with root cause
java.lang.ClassCastException: javax.faces.model.ListDataModel cannot be cast to org.primefaces.model.LazyDataModel
at org.primefaces.component.datatable.DataTable.clearLazyCache(DataTable.java:964)
at org.primefaces.component.export.Exporter.exportAll(Exporter.java:224)
at org.primefaces.component.export.ExcelExporter.export(ExcelExporter.java:59)
at org.primefaces.component.export.DataExporter.processAction(DataExporter.java:97)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:105)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.ppts.setting.SessionFilter.doFilter(SessionFilter.java:38)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1527)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1484)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
下面是我用
<label>Export</label> <span class="info-box-title"> <h:panelGrid
columns="2" border="0" cellpadding="3" cellspacing="5">
<h:commandLink>
<img src="images/excel.png" class="img-responsive" />
<p:dataExporter type="xls" target="removetagtbl"
fileName="LeaverJoinerDataxls"
postProcessor="#{leaverJoinerTagReportBean.postProcessXLS}"/>
</h:commandLink>
<h:commandLink style="padding-right: 20px;">
<img src="images/csv.png" />
<p:dataExporter type="csv" target="removetagtbl"
fileName="LeaverJoinerDatacsv" />
</h:commandLink>
我用LazyDataModel所有DATAS添加到JSF代码一个清单
请指导我,并纠正我,如果有任何错误。
下面是使用LazyDataModel
public class LeaverJoinerReportLazyModel extends LazyDataModel<LeaverJoinerTagReportDTO> {
private static final long serialVersionUID = 1L;
private List<LeaverJoinerTagReportDTO> datasource;
public LeaverJoinerReportLazyModel(List<LeaverJoinerTagReportDTO> datasource) {
this.datasource = datasource;
}
@Override
public LeaverJoinerTagReportDTO getRowData(String rowKey) {
for (LeaverJoinerTagReportDTO leaverJoinerTagReportDTO : datasource) {
if (leaverJoinerTagReportDTO.getLineId().equals(rowKey))
return leaverJoinerTagReportDTO;
}
return null;
}
@Override
public Object getRowKey(LeaverJoinerTagReportDTO leaverJoinerTagReportDTO) {
return leaverJoinerTagReportDTO.getLineId();
}
@Override
public List<LeaverJoinerTagReportDTO> load(int first, int pageSize,
String sortField, SortOrder sortOrder, Map<String, Object> filters) {
List<LeaverJoinerTagReportDTO> dataList = new ArrayList<LeaverJoinerTagReportDTO>();
// filter
for (LeaverJoinerTagReportDTO leaverJoinerTagReportDTO : datasource) {
boolean match = true;
if (filters != null) {
for (Iterator<String> iterator = filters.keySet().iterator();iterator.hasNext();) {
try {
String sFilterProperty = iterator.next();
Object sFilterValue = filters.get(sFilterProperty);
String sFieldValue = String.valueOf(leaverJoinerTagReportDTO.getClass().getField(sFilterProperty).get(leaverJoinerTagReportDTO));
if (sFilterValue == null || sFieldValue.startsWith(sFilterValue.toString())) {
match = true;
} else {
match = false;
break;
}
} catch (Exception e) {
match = false;
}
}
}else{
//Do Nothing
}
if (match) {
dataList.add(leaverJoinerTagReportDTO);
}
}
// rowCount
int dataSize = dataList.size();
this.setRowCount(dataSize);
// paginate
if (dataSize > pageSize) {
try {
return dataList.subList(first, first + pageSize);
} catch (IndexOutOfBoundsException e) {
return dataList.subList(first, first + (dataSize % pageSize));
}
} else {
return dataList;
}
}
}
嗨,但我没有在我的项目中的任何地方使用ListDataModel,请参考我已附加的代码,在bean中前进我只是获取上面的类的对象,并使用该对象,迭代在JSF页面中完成在数据表中使用各自的豆的获得者 –
你使用PF 5.1吗? https://code.google.com/archive/p/primefaces/issues/7947 – dognose
是的,我使用PF 5.1 –