2012-02-06 16 views
5

Tengo una situación en la que tengo más datos de los que se pueden acomodar en una sola fila que se devuelve a un elemento de tabla de datos. Para tratar con esto simplemente he combinado los resultados en una sola celda. Lo que estoy buscando es una forma de determinar si he llegado al último objeto en el conjunto de resultados para poder descartar el límite inferior utilizado como mi separador. En definitiva, no sé con cuántos objetos me enfrentaré.diseño del último registro en una tabla de datos jsf

.most { 
    background-color:cyan; 
    border-bottom:medium solid black; 
} 
.last { 
    border-bottom:none; 
} 

<h:dataTable id="myTable" value="#{flowData.selectedItem.profile}" var="profile" columnClasses="most, last"> 
<h:column> 
    <h:inputText id="_last" value="#{profile.last}" /> 
    <h:inputText id="_first" value="#{profile.first}" /> 
    <h:inputText id="_middle" value="#{profile.middle}" /> 
    <h:inputText id="_city" value="#{profile.city}" /> 
    <h:inputText id="_state" value="#{profile.state}" /> 
</h:column> 
</h:dataTable> 

Gracias de antemano por cualquier entrada.

Respuesta

2

Eso depende de la versión del navegador IE que le gustaría admitir.

Si no te importa la compatibilidad con IE6/7, entonces puedes usar el pseudoclass CSS2 :last-child para esto.

table.yourTableClass tbody tr td { 
    background-color: cyan; 
    border-bottom: medium solid black; 
} 
table.yourTableClass tbody tr:last-child td { 
    border-bottom: none; 
} 

con

<h:dataTable ... styleClass="yourTableClass"> 

(sí, IE7 soporta la contraparte CSS2 pseudoclass :first-child, pero sí muy no apoyan la :last-child!)

Si se preocupan por Internet Explorer 7, pero no sobre IE6, entonces también puedes hacerlo al revés, con un border-top en lugar de border-bottom que se establece en none en :first-child:

table.yourTableClass tbody tr td { 
    background-color: cyan; 
    border-top: medium solid black; 
} 
table.yourTableClass tbody tr:first-child td { 
    border-top: none; 
} 

Si embargo, también se preocupa por IE6 (que es discutable estos días), entonces no se puede ir por la generación de la serie de clases fila ti mismo en el interior (no clases columna!) el frijol administrado

<h:dataTable ... rowClasses="#{flowData.rowClasses}"> 

con

public String getRowClasses() { 
    StringBuilder builder = new StringBuilder(); 
    int size = selectedItem.getProfile().size(); // getProfiles() ? 

    for (int i = 0; i < size; i++) { 
     builder.append((i + 1 < size) ? "most," : "last"); 
    } 

    return builder.toString(); 
} 

y esto CSS

tr.more td { 
    background-color: cyan; 
    border-bottom: medium solid black; 
} 
tr.last td { 
    border-bottom: none; 
} 
+0

Gracias por su excelente descripción de las diversas maneras de abordar esta. Al final opté por generar las rowClasses del bean. Funciona a las mil maravillas. – Corpse

Cuestiones relacionadas