9

バッキング値が空のときに h:datatable が空の行を作成しないようにする方法はありますか? より具体的には、列ヘッダーを持つ h:dataTable の 3 列に表示されるデータのコレクションがあります。リストに要素があるかどうかに関係なく、常にスレッドを表示する必要があります。これは正常に機能しますが、リストに要素がない場合、tbody に単一の空の行/セルが作成されます。これを防ぐ方法はありますか?

ありがとう!

バッキング Bean からのサンプル メソッド。テストのために、null または空のリストの両方を返そうとしました。どちらも同じ結果です。

    public List<LocationsDecorator> getLocations() {
    return null;
}

JSF フラグメント:

<h:dataTable styleClass="locations" id="locations1"
    var="nearestLoc" value="#{confirmationBean.locations}">
    <h:column>
        <!-- column header -->
        <f:facet name="header">Address</f:facet>
        <!-- row record -->
            #{nearestLoc.adddress}
        </h:column>
    <h:column>
        <!-- column header -->
        <f:facet name="header">Distance</f:facet>
        <!-- row record -->
            #{nearestLoc.distance}
        </h:column>
    <h:column>
        <!-- column header -->
        <f:facet name="header">Hours of Operation</f:facet>
        <!-- row record -->
        <h:dataTable styleClass="locations" var="data"
            value="#{nearestLoc.hoursOfOperation}">
            <h:column>     
                #{data}
                </h:column>
        </h:dataTable>

    </h:column>

</h:dataTable>

結果の HTML ( <tr><td></td></tr>tbody の " " が問題です):

<table id="contact:locations1" class="locations">
<thead>
<tr>
<th scope="col">Address</th>
<th scope="col">Distance</th>
<th scope="col">Hours of Operation</th>
</tr>
</thead>
<tbody>
<tr><td></td></tr></tbody>
</table>
4

3 に答える 3

5

空のテーブルに別のスタイルを指定します。例えば

table.empty tbody td {
    border: 0;
}

そして、条件付きで追加します。

<h:dataTable ... styleClass="locations #{empty component.value ? 'empty' : ''}">
于 2012-12-05T17:54:09.647 に答える
0

代わりに、メソッドをoutputTextタグでラップすると、列ヘッダーが消えないようにすることができる場合があります。

例:

  <h:column>
    <!-- column header -->
    <f:facet name="header">Address</f:facet>
    <!-- row record -->
       <h:outputText value="#{nearestLoc.adddress}" />
    </h:column>

このように、列自体は値に依存しません

于 2012-12-05T01:00:28.183 に答える