为什么JSF';s ui:是否重复将无效标记添加到我的HTML?

为什么JSF';s ui:是否重复将无效标记添加到我的HTML?,html,jsf,Html,Jsf,在我的JSF应用程序的页面模板中,我使用ui:repeat迭代一些数据以构建HTML表。我想为此使用基本的HTML标记,而不是类似于h:dataTable,因为当我尝试应用一些样式和JavaScript事件时,它们没有出现在正确的元素上。但是,当使用ui:repeat进行此操作时,我发现它会在不适当的位置添加无效的tr和td关闭标签 页面模板的代码与此类似: <table border="1" style="width: 100%;"> <ui:repeat var="

在我的JSF应用程序的页面模板中,我使用
ui:repeat
迭代一些数据以构建HTML表。我想为此使用基本的HTML标记,而不是类似于
h:dataTable
,因为当我尝试应用一些样式和JavaScript事件时,它们没有出现在正确的元素上。但是,当使用
ui:repeat
进行此操作时,我发现它会在不适当的位置添加无效的
tr
td
关闭标签

页面模板的代码与此类似:

<table border="1" style="width: 100%;">
    <ui:repeat var="row" value="#{bean.testData}">
        <tr>
            <ui:repeat var="column" value="#{bean.testData}">
                <td>#{row}, #{column}</td>
            </ui:repeat>
        </tr>
    </ui:repeat>
</table>
其输出为:

<table border="1" style="width: 100%;"></td>
</tr>
<tr>
<td>
    <tr>
        <td>fu, fu</td>
        <td>fu, bar</td>
    </tr>
    <tr>
        <td>bar, fu</td>
        <td>bar, bar</td>
    </tr></td>
</tr>
<tr>
<td>
</table>
在Google Chrome和Firefox中,这会导致在表的顶部和底部多出一行,其中包含一个空单元格

有没有办法防止这种情况


更新:我没有想到我正在生成的这个表会出现在
h:panelGrid
元素中。我不知道这是否会对这个问题产生影响。

根据更新,您需要将代码封装在JSF标记中,如下所示:

<h:panelGrid>
    <ui:fragment>
        <table border="1" style="width: 100%;">
            <ui:repeat var="row" value="#{bean.testData}">
                <tr>
                    <ui:repeat var="column" value="#{bean.testData}">
                        <td>#{row}, #{column}</td>
                    </ui:repeat>
                </tr>
            </ui:repeat>
        </table>
    </ui:fragment>
</h:panelGrid>

#{row},#{column}
否则,
h:panelGrid
的呈现将无法在嵌套内容的单元格中正确分割
h:panelGrid
设计用于仅处理JSF组件

更多信息:


根据更新,您需要将代码封装在JSF标记中,如下所示:

<h:panelGrid>
    <ui:fragment>
        <table border="1" style="width: 100%;">
            <ui:repeat var="row" value="#{bean.testData}">
                <tr>
                    <ui:repeat var="column" value="#{bean.testData}">
                        <td>#{row}, #{column}</td>
                    </ui:repeat>
                </tr>
            </ui:repeat>
        </table>
    </ui:fragment>
</h:panelGrid>

#{row},#{column}
否则,
h:panelGrid
的呈现将无法在嵌套内容的单元格中正确分割
h:panelGrid
设计用于仅处理JSF组件

更多信息:


在我这边测试并正常工作(Mojarra 2.1.14)。在我这边测试并正常工作(Mojarra 2.1.14)。谢谢!现在我明白了,这很有道理。如果我使用
h:panelGroup
而不是
ui:fragment
,这会有什么不同吗?@LS,不,它会起同样的作用,只需要封装,因为
h:panelGrid
需要JSF标记!知道了。我想如果我需要它的一些属性,比如
rendered
,我可能会使用
h:panelGroup
。再次感谢!谢谢现在我明白了,这很有道理。如果我使用
h:panelGroup
而不是
ui:fragment
,这会有什么不同吗?@LS,不,它会起同样的作用,只需要封装,因为
h:panelGrid
需要JSF标记!知道了。我想如果我需要它的一些属性,比如
rendered
,我可能会使用
h:panelGroup
。再次感谢!
</td>
</tr>
<tr>
<td>
<h:panelGrid>
    <ui:fragment>
        <table border="1" style="width: 100%;">
            <ui:repeat var="row" value="#{bean.testData}">
                <tr>
                    <ui:repeat var="column" value="#{bean.testData}">
                        <td>#{row}, #{column}</td>
                    </ui:repeat>
                </tr>
            </ui:repeat>
        </table>
    </ui:fragment>
</h:panelGrid>