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要素は、期待どおりに機能しています。)「手動で作成されたものの最初の要素」とそのドロップダウンが同じ行の2つのセルとして表示されることを期待しています。ただし、これは生成されたHTMLに表示されるものです。

<tr>
<td>Manually Created First Element of Stuff</td>
<td>
                            </td>
                            <td></td>
</tr>
<tr>
<td><select...

2行。ただし、以下のネストされたものでは、次のようになります。

                    <tr>
                        <td>[Label I'm expecting]
                            </td>
                            <td><select...

...これはまさに私が期待したとおりの動作です。

私は何が間違っているのですか?どういうわけかJSFを誤用していますか?私が見ていないそこに顔の手のひらに値するタイプミスがありますか?

4

1 に答える 1

3

<h:panelGrid>、JSF コンポーネント ツリーの最初の兄弟を選択して、新しいテーブル セルを開始します。<table>あなたが持っているプレーンな HTML要素は 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 に答える