Pregunta

He estado tratando de conseguir esta funcionalidad de expandir / contraer de filas de la tabla utilizando JSF núcleo y también tienen que preservar la clasificación. ¿Hay una manera de JSF núcleo donde puedo conseguir esta funcionalidad?

¿Fue útil?

Solución

Si usted insiste en el uso de solamente implementación de referencia, entonces usted no puede ir por ahí usando un h:dataTable anidado y / o h:panelGroup y un bien foto de CSS para lograr que se alinean muy bien. A continuación, puede utilizar JavaScript de forma inteligente para mostrar / ocultar los detalles de fila.

Aquí hay un ejemplo básico patada de salida:

<h:dataTable value="#{bean.orders}" var="order">
    <h:column>
        <h:panelGrid columns="3">
            <h:graphicImage id="expand" value="expand.gif" onclick="toggleDetails(this);" />
            <h:outputText value="#{order.id}" />
            <h:outputText value="#{order.name}" />
        </h:panelGrid>
        <h:dataTable id="details" value="#{order.details}" var="detail" style="display: none;">
            <h:column><h:outputText value="#{detail.date}" /></h:column>
            <h:column><h:outputText value="#{detail.description}" /></h:column>
            <h:column><h:outputText value="#{detail.quantity}" /></h:column>
        </h:dataTable>
    </h:column>
</h:dataTable>

La función toggleDetails() puede ser similar (nota que toma JSF generada ID de cliente en cuenta):

function toggleDetails(image) {
    var detailsId = image.id.substring(0, image.id.lastIndexOf(':')) + ':details';
    var details = document.getElementById(detailsId);
    if (details.style.display == 'none') {
        details.style.display = 'block';
        image.src = 'collapse.gif';
    } else {
        details.style.display = 'none';
        image.src = 'expand.gif';
    }
}

Otros consejos

No creo que usted puede hacer esto con el 'núcleo' de JSF (por que supongo que escriba usando solamente la implementación de referencia).

A mi entender, se puede lograr subtablas con RichFaces subtabla

También se puede hacer una cosa similar con IceFaces - ver el escaparate componente (que está bajo la tabla -> Mesa extensible). Sin embargo ninguno de estos requeriría que la adición y la creación de otra biblioteca (RichFaces o IceFaces) que probablemente no es lo que desea.

Mesa extensible simple con RichFaces

Podemos hacer mesa extensible simple con RichFaces y el código se da a continuación ...

<h:form>
   <rich:dataTable value="#{wonderBean.wonders}" var="wonder">
      <rich:column colspan="3">
         <f:facet name="header">Wonder</f:facet>
     <h:outputText value="#{wonder.name}" />
     <a4j:commandLink id="link" value="#{!wonderBean.show?'[+]':'[-]'}"
        reRender="link">
     <a4j:actionparam name="val" value="#{!wonderBean.show}"
        assignTo="#{wonderBean.show}" />
     </a4j:commandLink>
      </rich:column>
      <rich:columnGroup>
         <rich:column>
        <a4j:outputPanel ajaxRendered="true">
             <rich:dataTable value="#{wonder.details}" var="detail"
            rendered="#{wonderBean.show}" style="border: 0px">
                <rich:column>
            <f:facet name="header">Location</f:facet>
            <h:outputText value="#{detail.location}" />
            </rich:column>
            <rich:column>
               <f:facet name="header">Image</f:facet>
               <h:graphicImage value="#{detail.imageUrl}" />
            </rich:column>
         </rich:dataTable>
          </a4j:outputPanel>
       </rich:column>
        </rich:columnGroup>
     </rich:dataTable>
</h:form>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top