Экспортер Excel для Primefaces Extensions создает свойство, не найденное для типа

Я знаю, что об этом много спрашивали. Я уже искал и пробовал несколько решений, как это, но ни одно из них не работает. Позвольте мне объяснить мою проблему:

Я использую Primefaces 4.0 с расширениями Primefaces 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}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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)

Это первый метод в этой таблице, который он пытается вызвать.

Все эти методы выглядят одинаково, получает Proceso (это объект, который отображается в таблице данных) и возвращает String:

Мой боб выглядит так:

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, но никто из них не работал. Эта проблема отображается, только когда я нажимаю кнопку "Экспорт в Excel", в таблице успешно отображается вся информация из этих методов.

Любая помощь будет оценена, спасибо!

1 ответ

Решение

Экспортер принимает только значения Expressions afaik, а не метод Expressions. ValueExpressions состоят из методов получения и установки свойств, а методы получения не принимают параметры. Таким образом, разрешение свойства не удается, как ожидалось

Другие вопросы по тегам