为什么JSF';s ui:是否重复将无效标记添加到我的HTML?
在我的JSF应用程序的页面模板中,我使用为什么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="
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组件
更多信息:
<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组件
更多信息:
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>