2011-03-27 62 views
1

請幫忙。 看看http://richfaces-showcase.appspot.com/richfaces/component-sample.jsf?demo=extendedDataTable&sample=exTableSelection&skin=blueSkyRichfaces ExtendedDataTable選擇問題

你會看到很好的「汽車市場」表具有多種選擇支持。您還會注意到其中一個選定的行以粗體顯示。這條粗線的意思是什麼?它是否通過org.richfaces.component.UIExtendedDataTable或任何其他RF類的方法進行管理?無法找到該行的API。

我想要做的是在backing bean中創建新項目,並強制選擇表格以指向新創建的項目。我設法通過setSelection()來設置選區,但我無法控制該粗線,它仍然位於之前的位置,請幫助。

回答

5

所選行的粗體樣式由richfaces附帶的樣式表管理。richfaces中的每個主題都有自己的樣式表。您可以參考official documentation (It is still a draft version)以查看哪些樣式類可用於自定義rich:extendedDataTable的外觀。

例如,rf-edt-r-selrf-edt-r-act定義所選行的風格,你可以通過聲明的樣式在頁面這些樣式類名,你用rich:extendedDataTable

<style type="text/css"> 
.rf-edt-r-sel{ 
    background-color: yellow; 
} 

.rf-edt-r-act{ 
    font-weight: bold;  
    color: red; 
} 
</style> 

回覆評論覆蓋它們:

RowKey似乎是擴展表的行號。如果您想從UIExtendedDataTable中獲得潛在對象(即InventoryItem),則必須在調用getRowData()以獲取實際對象之前,使用setRowKey(selectionKey)設置要檢索的行號。因此,dataTable.setRowKey(selectionKey)用於從UIExtendedDataTable中獲取所選的InventoryItem,以便將它們放入selectionItems(將顯示在除擴展表之外的「選定行」框中)。對於Object originalKey = dataTable.getRowKey();dataTable.setRowKey(originalKey);,您可以參考此link

在richfaces 3.3中,我發現UIExtendedDataTable有一個名爲setActiveRowKey()的方法,它似乎可以設置活動記錄。但它在最新版本的richfaces 4.0 CR1中被刪除。因此,也許你可以使用UIExtendedDataTable's java script API來達到同樣的效果。

您首先在您的MBean中定義一個名爲boldRowint屬性。然後你將有一個<a4j:commandButton>來調用一個Mbean的方法。這個方法將根據你的邏輯分配你想要選擇的行號。該按鈕的oncomplete屬性應調用UIExtendedDataTable的JavaScript API來選擇哪一行的行號等於boldRow,然後使用render屬性刷新UIExtendedDataTable。所以<a4j:commandButton><rich:extendedDataTable>或許應該是這樣的:

<a4j:commandButton value="Submit" action = "#{MBean.action}" render="#{rich:clientId('table')}" 
      oncomplete="#{rich:component('table')}.selectRow(#{MBean.boldRow}); #{rich:component('table')}.setActiveRow(#{MBean.boldRow});" /> 

<rich:extendedDataTable id="table" ..... 
................ 
</rich:extendedDataTable> 
+0

感謝鏈接,但我還是不明白在http://docs.jboss.org/richfaces/latest_4_0_X/Component_Reference/en-US/html代碼/chap-Component_Reference-Tables_and_grids.html#exam-Component_Reference-richextendedDataTable-Selecting_multiple_rows,方法public void selectionListener()。有一行'dataTable.setRowKey(selectionKey)',總是遵循並由'dataTable.setRowKey(originalKey)'重寫。這是爲什麼?是否是rowKey負責粗線?我需要並通過API來控制這個大膽的選擇。 – Osw 2011-03-28 05:47:05

+0

我已經更新了我的答案,希望對我有所幫助 – 2011-03-29 10:00:05

+0

非常感謝,現在我明白了。 – Osw 2011-03-29 10:21:27