簡體   English   中英

跳過jsf dataTable中的某些行

[英]Skip some row in jsf dataTable

如何跳過一些要使用dataTable顯示的行:

<h:dataTable cellspacing="0" id="dogs" value="#{dogBean.dogs}" var="dog" rendered="#{dogBeans.dogs != null}">

<h:column id="nameColumn">

    <h:outputText value="#{dog.name}"/>
</h:column>

<h:column id="breedColumn">

    <h:outputText value="#{dog.breed}"/>
</h:column>

</h:dataTable>

我想顯示所有的狗,但是要顯示年齡大於10歲的狗。dog.age> 10。

我正在使用Seam。

您不能在視圖方面很好地做到這一點。 您最多可以將每個單元格內容的rendered屬性設置為false ,但這不能避免<tr>元素被渲染。 您會看到一個空白行,並且它的外觀在瀏覽器之間可能不一致。

最好是預先在(post)構造,action(listener)中過濾行,或者在getter中延遲過濾。

List<Dog> dogsOlderThan10 = new ArrayList<Dog>();
for (Dog dog : dogs) {
    if (dog.getAge() > 10) dogsOlderThan10.add(dog);
}

或者,只需發送一個新的SQL查詢,即可返回所需的確切數據。

您可以編寫自己的數據表渲染器。 例如,我使用richfaces並具有以下渲染器:

public class DetailDataTableRenderer extends DataTableRenderer {

    @Override
    public void encodeOneRow(FacesContext context, TableHolder tableHolder) throws IOException {
        Object obj = tableHolder.getTable().getRowData();
        if (obj instanceof BasicDTO) {
            BasicDTO dto = (BasicDTO)obj;
            if (dto.isSkipRow()) {
                return;
            }
        }
        super.encodeOneRow(context, tableHolder);
    }
}

我將渲染器注冊為

<renderer>
    <component-family>org.richfaces.DataTable</component-family>
    <renderer-type>org.richfaces.DataTableRenderer</renderer-type>
    <renderer-class>myframework.view.component.DetailDataTableRenderer</renderer-class>     
</renderer>

希望對您有所幫助。

塞薩爾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM