我试图在 ah:panelGrid 组件中嵌套一个表格,而 h:selectOneMenu 通过关闭它出现在其中的单元格并创建一个新的(和不需要的)行来搞砸格式。
我的代码看起来像这样:
<h:panelGrid columns="2">
[Other rows that work just fine]
<h:outputText value="Match [Stuff] to [More Stuff]:" />
<table>
<tr>
<th>[Stuff]</th>
<th>[More Stuff]</th>
</tr>
<tr>
<td>
<h:outputText value="Manually Created First Element of Stuff" />
</td>
<td>
<h:selectOneMenu value="#{bean.moreStuffSetting}">
<f:selectItem itemLabel="--None--" itemValue="" />
<f:selectItem itemLabel="Manual First Choice" itemValue="manual" />
<f:selectItems
value="#{bean.listOfMoreStuff}"
var="moreStuff"
itemLabel="#{moreStuff.name}"
itemValue="#{moreStuff.value}" />
</h:selectOneMenu>
</td>
</tr>
<ui:repeat value="#{bean.listOfStuff}" var="stuff">
<tr>
<td>
<h:outputText value="#{stuff.name}" />
</td>
<td>
<h:selectOneMenu value="#{bean.moreStuffSetting}">
<f:selectItem itemLabel="--None--" itemValue="" />
<f:selectItem itemLabel="Manual First Choice" itemValue="manual" />
<f:selectItems
value="#{bean.listOfMoreStuff}"
var="moreStuff"
itemLabel="#{moreStuff.name}"
itemValue="#{moreStuff.value}" />
</h:selectOneMenu>
</td>
</tr>
</ui:repeat>
</table>
</h:panelGrid>
问题出现在第一个 h:selectOneMenu 元素上。(但是,ui:repeat 中的 h:selectOneMenu 元素完全符合我的预期。)我期待“手动创建的第一个元素元素”并且该下拉菜单显示为同一行中的两个单元格。但是,这是生成的 HTML 中显示的内容:
<tr>
<td>Manually Created First Element of Stuff</td>
<td>
</td>
<td></td>
</tr>
<tr>
<td><select...
两排。但是,在下面的嵌套中,我得到了这个:
<tr>
<td>[Label I'm expecting]
</td>
<td><select...
...这正是我期望它的行为方式。
我究竟做错了什么?我是否以某种方式滥用 JSF?那里有一些我没有看到的值得一提的错字吗?