Primefaces Extensions 的 Excel Exporter 抛出 属性 not found on type
Primefaces Extensions' Excel Exporter throws Property not found on type
我知道很多人都问过这个问题。我已经搜索并尝试了多种解决方案,例如 this one,但其中 none 有效。让我解释一下我的问题:
我正在使用 Primefaces 4.0 和 Primefaces Extensions 1.2.1。在较大的页面中,我有这个 DataTable,我想将其数据导出到 excel。
<p:dataTable id="t_resultados" value="#{buscarTramitesController.tablaProcesos}" var="proceso"
emptyMessage="No se han encontrado Trámites"
paginator="true" rows="10" paginatorPosition="top"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,50,100" lazy="true"
currentPageReportTemplate="Registros Totales: {totalRecords} Página: {currentPage} de {totalPages}"
selection="#{buscarTramitesController.procesoSeleccionado}" selectionMode="single"
rowKey="#{proceso.id}" resizableColumns="true" draggableColumns="true">
<p:column width="80" sortBy="#{proceso.nombre}">
<f:facet name="header"><p:outputLabel value="Nombre:"/></f:facet>
<p:outputLabel value="#{proceso.nombre}"/>
</p:column>
<p:column width="80" sortBy="#{proceso.tramite.expedienteAsociado.nombre}">
<f:facet name="header"><p:outputLabel value="Expediente:"/></f:facet>
<p:outputLabel value="#{proceso.tramite.expedienteAsociado.nombre}"/>
</p:column>
<p:column width="110" sortBy="#{proceso.fechaInicio}">
<f:facet name="header"><p:outputLabel value="Fecha de Inicio"/></f:facet>
<h:outputText value="#{proceso.fechaInicio}">
<f:convertDateTime pattern="dd/MM/yyyy hh:mm a"/>
</h:outputText>
</p:column>
<p:column width="140" sortBy="#{proceso.fechaFinalizacion}">
<f:facet name="header"><p:outputLabel value="Fecha de Finalización"/></f:facet>
<h:outputText rendered="#{proceso.fechaFinalizacion eq null}"
value="Proceso en marcha">
</h:outputText>
<h:outputText rendered="#{proceso.fechaFinalizacion ne null}" value="#{proceso.fechaFinalizacion}">
<f:convertDateTime pattern="dd/MM/yyyy hh:mm a"/>
</h:outputText>
</p:column>
<p:column width="120">
<f:facet name="header"><p:outputLabel value="Actividad actual"/></f:facet>
<h:outputText value="#{buscarTramitesController.NombreActividad(proceso)}">
</h:outputText>
</p:column>
<p:column width="120" >
<f:facet name="header"><p:outputLabel value="Aceptada por"/></f:facet>
<h:outputText value="#{buscarTramitesController.AceptadaPor(proceso)}">
</h:outputText>
</p:column>
<p:column width="170">
<f:facet name="header"><p:outputLabel value="Última actividad completada"/></f:facet>
<h:outputText value="#{buscarTramitesController.UltimaCompletada(proceso)}">
<f:convertDateTime pattern="dd/MM/yyyy hh:mm a"/>
</h:outputText>
</p:column>
<p:column>
<f:facet name="header"><p:outputLabel value="Completada por"/></f:facet>
<h:outputText value="#{buscarTramitesController.CompletadaPor(proceso)}">
</h:outputText>
</p:column>
<p:column width="80">
<f:facet name="header"><p:outputLabel value="Opciones"/></f:facet>
<p:commandLink immediate="true" value="Ver" actionListener="#{buscarTramitesController.abrirTramite(proceso.id)}"/>
</p:column>
<p:ajax event="rowDblselect" listener="#{buscarTramitesController.abrirTramite(buscarTramitesController.procesoSeleccionado.id)}"/>
</p:dataTable>
我的出口商看起来像这样:
<p:commandButton value="Exportar a Excel" id="b_exportar" ajax="false">
<pe:exporter type="xlsx" target="t_resultados" fileName="Lista de Tramites"/>
</p:commandButton>
我的应用程序中有多个 excel 导出器,只有那个出现问题。当我单击该按钮时,它会抛出以下异常:
javax.servlet.ServletException: /busquedas/BuscarTramites.xhtml @124,100 value="#{buscarTramitesController.NombreActividad(proceso)}": Property 'NombreActividad' not found on type com.megagroup.mgestion.web.controller.busquedas.BuscarTramitesController
javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
这是它尝试调用的 table 中的第一个方法。
这些方法看起来都一样,接收一个 Proceso
(这是数据中显示的对象table)和 returns 一个 String
:
我的支持 bean 如下所示:
private Tarea ultimaTareaCompletada(Proceso proceso) {
List<Tarea> tareas = proceso.getTareas();
if (tareas == null || tareas.isEmpty()) {
return null;
}
List<Tarea> tareasCompletadas = new ArrayList<>();
for (Tarea tarea : tareas) {
if (tarea.getEstado().equals(EstadoTarea.COMPLETADA)) {
tareasCompletadas.add(tarea);
}
}
if (tareasCompletadas.isEmpty()) {
return null;
}
Collections.sort(tareasCompletadas, new Comparator<Tarea>() {
@Override
public int compare(Tarea t1, Tarea t2) {
if (t2.getFechaFinalizacion() == null) {
return 999;
}
if (t1.getFechaFinalizacion() == null) {
return 0;
}
return t2.getFechaFinalizacion().compareTo(t1.getFechaFinalizacion());
}
});
return tareasCompletadas.get(0);
}
public String UltimaCompletada(Proceso proceso) {
Tarea tarea = ultimaTareaCompletada(proceso);
if (tarea == null) {
return PROCESO_SIN_TAREAS;
} else if (tarea.getTipoTarea() == null) {
return TAREA_SIN_ACTIVIDAD;
} else if (tarea.getTipoTarea().getNombre() == null || tarea.getTipoTarea().getNombre().isEmpty()) {
return ACTIVIDAD_SIN_NOMBRE;
} else {
return tarea.getTipoTarea().getNombre();
}
}
public String CompletadaPor(Proceso proceso) {
Tarea tarea = ultimaTareaCompletada(proceso);
if (tarea == null) {
return PROCESO_SIN_TAREAS;
} else if (tarea.getNombreUsuario() == null) {
return COMPLETADA_SIN_USUARIO;
} else {
return tarea.getNombreUsuario();
}
}
private Tarea actividadActual(Proceso proceso) {
if (proceso.getTareas() == null || proceso.getTareas().isEmpty()) {
return null;
}
return proceso.getTareas().get(proceso.getTareas().size() - 1);
}
public String AceptadaPor(Proceso proceso) {
Tarea tarea = actividadActual(proceso);
if (tarea == null) {
return PROCESO_SIN_TAREAS;
}
if (tarea.getNombreUsuario() == null || tarea.getNombreUsuario().isEmpty()) {
return SIN_ACEPTAR;
}
return tarea.getNombreUsuario();
}
public String NombreActividad(Proceso proceso) {
Tarea tarea = actividadActual(proceso);
if (tarea == null) {
return PROCESO_SIN_TAREAS;
}
if (tarea.getTipoTarea().getNombre() == null || tarea.getTipoTarea().getNombre().isEmpty()) {
return ACTIVIDAD_SIN_NOMBRE;
}
return tarea.getTipoTarea().getNombre();
}
虽然这是方法的名称,但我已经尝试过这样重命名它们:getNombreActividad
、nombreActividad
、NombreActividad
、getnombreActividad
,但是 none 他们的工作。该问题仅在我单击导出到 excel 按钮时出现,table 成功显示来自这些方法的所有信息。
任何帮助将不胜感激,谢谢!
出口商只接受 valueExpressions afaik 而不是 methodExpressions。 ValueExpressions 由属性的 getter 和 setter 组成,getter 不接受参数。所以 属性 的解析如预期的那样失败了
我知道很多人都问过这个问题。我已经搜索并尝试了多种解决方案,例如 this one,但其中 none 有效。让我解释一下我的问题:
我正在使用 Primefaces 4.0 和 Primefaces Extensions 1.2.1。在较大的页面中,我有这个 DataTable,我想将其数据导出到 excel。
<p:dataTable id="t_resultados" value="#{buscarTramitesController.tablaProcesos}" var="proceso"
emptyMessage="No se han encontrado Trámites"
paginator="true" rows="10" paginatorPosition="top"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,50,100" lazy="true"
currentPageReportTemplate="Registros Totales: {totalRecords} Página: {currentPage} de {totalPages}"
selection="#{buscarTramitesController.procesoSeleccionado}" selectionMode="single"
rowKey="#{proceso.id}" resizableColumns="true" draggableColumns="true">
<p:column width="80" sortBy="#{proceso.nombre}">
<f:facet name="header"><p:outputLabel value="Nombre:"/></f:facet>
<p:outputLabel value="#{proceso.nombre}"/>
</p:column>
<p:column width="80" sortBy="#{proceso.tramite.expedienteAsociado.nombre}">
<f:facet name="header"><p:outputLabel value="Expediente:"/></f:facet>
<p:outputLabel value="#{proceso.tramite.expedienteAsociado.nombre}"/>
</p:column>
<p:column width="110" sortBy="#{proceso.fechaInicio}">
<f:facet name="header"><p:outputLabel value="Fecha de Inicio"/></f:facet>
<h:outputText value="#{proceso.fechaInicio}">
<f:convertDateTime pattern="dd/MM/yyyy hh:mm a"/>
</h:outputText>
</p:column>
<p:column width="140" sortBy="#{proceso.fechaFinalizacion}">
<f:facet name="header"><p:outputLabel value="Fecha de Finalización"/></f:facet>
<h:outputText rendered="#{proceso.fechaFinalizacion eq null}"
value="Proceso en marcha">
</h:outputText>
<h:outputText rendered="#{proceso.fechaFinalizacion ne null}" value="#{proceso.fechaFinalizacion}">
<f:convertDateTime pattern="dd/MM/yyyy hh:mm a"/>
</h:outputText>
</p:column>
<p:column width="120">
<f:facet name="header"><p:outputLabel value="Actividad actual"/></f:facet>
<h:outputText value="#{buscarTramitesController.NombreActividad(proceso)}">
</h:outputText>
</p:column>
<p:column width="120" >
<f:facet name="header"><p:outputLabel value="Aceptada por"/></f:facet>
<h:outputText value="#{buscarTramitesController.AceptadaPor(proceso)}">
</h:outputText>
</p:column>
<p:column width="170">
<f:facet name="header"><p:outputLabel value="Última actividad completada"/></f:facet>
<h:outputText value="#{buscarTramitesController.UltimaCompletada(proceso)}">
<f:convertDateTime pattern="dd/MM/yyyy hh:mm a"/>
</h:outputText>
</p:column>
<p:column>
<f:facet name="header"><p:outputLabel value="Completada por"/></f:facet>
<h:outputText value="#{buscarTramitesController.CompletadaPor(proceso)}">
</h:outputText>
</p:column>
<p:column width="80">
<f:facet name="header"><p:outputLabel value="Opciones"/></f:facet>
<p:commandLink immediate="true" value="Ver" actionListener="#{buscarTramitesController.abrirTramite(proceso.id)}"/>
</p:column>
<p:ajax event="rowDblselect" listener="#{buscarTramitesController.abrirTramite(buscarTramitesController.procesoSeleccionado.id)}"/>
</p:dataTable>
我的出口商看起来像这样:
<p:commandButton value="Exportar a Excel" id="b_exportar" ajax="false">
<pe:exporter type="xlsx" target="t_resultados" fileName="Lista de Tramites"/>
</p:commandButton>
我的应用程序中有多个 excel 导出器,只有那个出现问题。当我单击该按钮时,它会抛出以下异常:
javax.servlet.ServletException: /busquedas/BuscarTramites.xhtml @124,100 value="#{buscarTramitesController.NombreActividad(proceso)}": Property 'NombreActividad' not found on type com.megagroup.mgestion.web.controller.busquedas.BuscarTramitesController
javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
这是它尝试调用的 table 中的第一个方法。
这些方法看起来都一样,接收一个 Proceso
(这是数据中显示的对象table)和 returns 一个 String
:
我的支持 bean 如下所示:
private Tarea ultimaTareaCompletada(Proceso proceso) {
List<Tarea> tareas = proceso.getTareas();
if (tareas == null || tareas.isEmpty()) {
return null;
}
List<Tarea> tareasCompletadas = new ArrayList<>();
for (Tarea tarea : tareas) {
if (tarea.getEstado().equals(EstadoTarea.COMPLETADA)) {
tareasCompletadas.add(tarea);
}
}
if (tareasCompletadas.isEmpty()) {
return null;
}
Collections.sort(tareasCompletadas, new Comparator<Tarea>() {
@Override
public int compare(Tarea t1, Tarea t2) {
if (t2.getFechaFinalizacion() == null) {
return 999;
}
if (t1.getFechaFinalizacion() == null) {
return 0;
}
return t2.getFechaFinalizacion().compareTo(t1.getFechaFinalizacion());
}
});
return tareasCompletadas.get(0);
}
public String UltimaCompletada(Proceso proceso) {
Tarea tarea = ultimaTareaCompletada(proceso);
if (tarea == null) {
return PROCESO_SIN_TAREAS;
} else if (tarea.getTipoTarea() == null) {
return TAREA_SIN_ACTIVIDAD;
} else if (tarea.getTipoTarea().getNombre() == null || tarea.getTipoTarea().getNombre().isEmpty()) {
return ACTIVIDAD_SIN_NOMBRE;
} else {
return tarea.getTipoTarea().getNombre();
}
}
public String CompletadaPor(Proceso proceso) {
Tarea tarea = ultimaTareaCompletada(proceso);
if (tarea == null) {
return PROCESO_SIN_TAREAS;
} else if (tarea.getNombreUsuario() == null) {
return COMPLETADA_SIN_USUARIO;
} else {
return tarea.getNombreUsuario();
}
}
private Tarea actividadActual(Proceso proceso) {
if (proceso.getTareas() == null || proceso.getTareas().isEmpty()) {
return null;
}
return proceso.getTareas().get(proceso.getTareas().size() - 1);
}
public String AceptadaPor(Proceso proceso) {
Tarea tarea = actividadActual(proceso);
if (tarea == null) {
return PROCESO_SIN_TAREAS;
}
if (tarea.getNombreUsuario() == null || tarea.getNombreUsuario().isEmpty()) {
return SIN_ACEPTAR;
}
return tarea.getNombreUsuario();
}
public String NombreActividad(Proceso proceso) {
Tarea tarea = actividadActual(proceso);
if (tarea == null) {
return PROCESO_SIN_TAREAS;
}
if (tarea.getTipoTarea().getNombre() == null || tarea.getTipoTarea().getNombre().isEmpty()) {
return ACTIVIDAD_SIN_NOMBRE;
}
return tarea.getTipoTarea().getNombre();
}
虽然这是方法的名称,但我已经尝试过这样重命名它们:getNombreActividad
、nombreActividad
、NombreActividad
、getnombreActividad
,但是 none 他们的工作。该问题仅在我单击导出到 excel 按钮时出现,table 成功显示来自这些方法的所有信息。
任何帮助将不胜感激,谢谢!
出口商只接受 valueExpressions afaik 而不是 methodExpressions。 ValueExpressions 由属性的 getter 和 setter 组成,getter 不接受参数。所以 属性 的解析如预期的那样失败了