2010-07-29 30 views
13

En JSF, h:dataTable y h:panelGrid ambos crean html table -tags.JSF: h: dataTable vs h: panelGrid

¿Cuál es la diferencia entre ambos?

¿Cuándo utilizar uno u otro?

+5

En una tuerca: use 'h: dataTable' para una tabla dinámica y' h: panelGrid' para una tabla estática. – BalusC

Respuesta

15

Como su nombre indica h:dataTable se usa principalmente para mostrar una tabla que contiene datos de algunos de los modelos en su aplicación. Here is an usage example.

  <h:dataTable value="#{dataTableBean.items}" var="item"> 
       <h:column> 
        <f:facet name="header" > 
         <h:outputText value="Item Category"/> 
        </f:facet>  
        <h:outputText value="#{item.category}"/> 
       </h:column> 
      </h:dataTable> 

El h:panelGrid se utiliza sobre todo para la disposición y colocación de propósito elementos. Here is an usage example.

<h:panelGrid id="panel" columns="2" border="1"> 
    <h:outputText value="First Name:" /> 
    <h:inputText id="first" value="#{backingBean.user.firstName}" /> 
    <h:outputText value="Last Name:" /> 
    <h:inputText id="last" value="#{backingBean.user.lastName}" /> 
</h:panelGrid> 
3

Debe utilizar un panelGrid cuando se conoce el número de filas y columnas que desea mostrar, hay que definir todos los niños componentes usted mismo (de forma manual, el panelGrid no añade filas/collumns por sí mismo) y el panelGrid los organizará. DataGrid por otro lado se usa cuando tienes una estructura de datos (como una colección) con un tamaño indeterminado, entonces solo tienes que especificar las columnas que deseas imprimir y el dataGrid iterará sobre esa colección creando una fila para cada entrada .

5

El dataTable es un componente de salida model-drivendata. Para cada fila en su modelo, el componente puede establecer el estado de sus hijos para cada fase del JSF lifecycle. Este comportamiento es beneficioso o perjudicial según lo que intentes lograr.

Por el contrario, el panelGrid es solo un layout control.

La diferencia es (muy) aproximadamente análoga a la diferencia entre JTable y JPanel.

Cuestiones relacionadas