JSF:h:dataTable vs h:panelGrid

时间:2010-07-29 23:19:46

标签: java jsf

在JSF中,h:dataTableh:panelGrid都会创建html table - 标记。

两者有什么区别?

何时使用其中一种?

3 个答案:

答案 0 :(得分:17)

因为它的名称表示h:dataTable主要用于显示包含应用程序中某些模型的数据的表。 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>

h:panelGrid主要用于布局和放置元素。 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>

答案 1 :(得分:5)

dataTablemodel-driven data输出组件。对于模型中的每一行,组件可以为JSF lifecycle的每个阶段设置其子项的状态。根据您想要实现的目标,这种行为是有益的或有害的。

相比之下,panelGrid只是layout control

差异(非常)大致类似于JTableJPanel之间的差异。

答案 2 :(得分:4)

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