2015-09-01 41 views
0

我知道這已被問了很多。我已經搜索並嘗試了多種解決方案,例如this one,但它們都不起作用。讓我解釋我的問題:Primefaces擴展的Excel導出器拋出屬性找不到類型

我使用Primefaces 4.0和Primefaces Extensions 1.2.1。在一個更大的頁面中,我有這個DataTable,我想導出爲ex​​cel的數據。

<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

我支持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,但它們都沒有工作。該問題僅在我點擊導出到excel按鈕時才顯示,表格顯示這些方法中的所有信息都成功。

任何幫助將不勝感激,謝謝!

+1

Offtopic:在java中normall中的方法以小寫字母開頭 – Kukeltje

回答

1

導出器只接受valueExpressions afaik而不接受methodExpressions。 ValueExpressions由getter和setter屬性組成,getter不接受參數。所以屬性的解決如預期的那樣失敗

+0

確實正確的答案,幫助我很多!謝謝你,兄弟! –

相關問題