Java JSF:h:dataTable与h:panelGrid

Java JSF:h:dataTable与h:panelGrid,java,jsf,Java,Jsf,在JSF中,h:dataTable和h:panelGrid都创建htmltable-标记 两者的区别是什么 何时使用一个或另一个?正如其名称所示h:dataTable主要用于显示包含应用程序中某些模型数据的表 当您知道要显示的行数和列数时,您应该使用panelGrid,您必须自己定义所有子组件(手动,panelGrid本身不会添加任何行/列),panelGrid将对它们进行排列。 另一方面,当您有一个大小不确定的数据结构(如集合)时,使用DataGrid,然后您只需指定要打印的列,DataGri

在JSF中,
h:dataTable
h:panelGrid
都创建html
table
-标记

两者的区别是什么


何时使用一个或另一个?

正如其名称所示
h:dataTable
主要用于显示包含应用程序中某些模型数据的表


当您知道要显示的行数和列数时,您应该使用panelGrid,您必须自己定义所有子组件(手动,panelGrid本身不会添加任何行/列),panelGrid将对它们进行排列。 另一方面,当您有一个大小不确定的数据结构(如集合)时,使用DataGrid,然后您只需指定要打印的列,DataGrid将在该集合上迭代,为每个条目创建一行。

是一个输出组件。对于模型中的每一行,组件可以为模型的每个阶段设置其子级的状态。这种行为是有益的还是有害的,取决于你想要达到的目标

相比之下,这只是一个简单的例子


这种差异(非常)大致类似于螺母中与之间的差异。

对于动态表,使用
h:dataTable
;对于静态表,使用
h:panelGrid
<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>
<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>