2

我试图在 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?那里有一些我没有看到的值得一提的错字吗?

4

1 回答 1

3

选择 JSF 组件树中的<h:panelGrid>第一个同级来开始一个新的表格单元格。您拥有的纯 HTML<table>元素不是 JSF 组件。

把它包在一个<h:panelGroup>.

<h:panelGrid columns="2">
    <h:outputText value="Match [Stuff] to [More Stuff]:" />
    <h:panelGroup>
        <table>
            ...
        </table>
    </h:panelGroup>
</h:panelGrid>

另一种方法是直接使用<h:dataTable>

于 2012-12-10T19:49:05.943 回答