JSF:如何在每一行添加TH?

时间:2011-07-28 17:00:35

标签: jsf html-table

我需要这个HTML输出:

<tr>
    <th>...</th>
    <td>...</td>
    <td>...</td>
</tr>
<tr>
    <th>...</th>
    <td>...</td>
    <td>...</td>
</tr>
etc...

我没有做太多JSF,这是我正在使用的JSF:

<h:dataTable>
    <h:column>...</h:column>
    <h:column>...</h:column>
    <h:column>...</h:column>
</h:dataTable>

那,唉,不给我任何TH只有3个TD。所以我接着尝试了这个:

<h:dataTable>
    <h:column><f:facet name="header">...</f:facet></h:column>
    <h:column>...</h:column>
    <h:column>...</h:column>
</h:dataTable>

但是这只给了我第一行的TH,而不是每一行。

有没有办法处理JSF而不必编写某些自定义组件?

1 个答案:

答案 0 :(得分:2)

每行中有一个实际的TH有多重要?如果这只是为了样式目的,你可以用h:dataTable的“columnClasses”来完成你想要的东西,给第一列一个不同的CSS类。

<h:dataTable columnClasses="firstColumn">
   ... h:columns ...
</h:dataTable>

如果每行绝对必须有一个TH元素,我想不出用h:dataTable做这个的方法,但你可以使用&lt; ui:repeat&gt;代替。这将像老派一样工作&lt; c:forEach&gt;在哪里渲染&lt; table&gt; /&lt; tr&gt;你自己。例如:

<ui:repeat value="#{bean.list}" var="row">
  <tr>
    <th><h:outputText value="#{row.foo}"/></th>
    <td><h:outputText value="#{row.bar}"/></td>
  </tr>
</ui:repeat>

希望这有帮助!