Вопрос выбора Richfaces ExtendedDataTable - PullRequest
1 голос
/ 27 марта 2011

Пожалуйста, помогите. Взгляните на http://richfaces -showcase.appspot.com / richfaces / component-sample.jsf? Demo = extendedDataTable & sample = exTableSelection & skin = blueSky

Вы увидите симпатичную таблицу «Рынок автомобилей» с поддержкой множественного выбора. Вы также заметите, что одна из выделенных строк выделена жирным шрифтом. Что вообще означает эта жирная линия? Это как-то управляется методами org.richfaces.component.UIExtendedDataTable или какими-либо другими классами RF? Не могу найти API для этой строки.

То, что я пытаюсь сделать, - это создать новый элемент внутри базового компонента и заставить выбор таблицы указывать на вновь созданный элемент. Мне удалось установить выделение с помощью setSelection(), но я не могу контролировать эту жирную линию, она остается на прежней позиции, пожалуйста, помогите.

1 Ответ

5 голосов
/ 28 марта 2011

Полужирный стиль для выбранной строки управляется таблицей стилей, поставляемой с richfaces. Каждая тема в richfaces имеет свою собственную таблицу стилей.Вы можете обратиться к официальной документации (это все еще черновая версия) , чтобы увидеть, какие классы стилей доступны для настройки внешнего вида rich:extendedDataTable.

Например, rf-edt-r-sel или rf-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 - это номер строки расширенной таблицы.Если вы хотите получить базовый объект (то есть InventoryItem) из UIExtendedDataTable, вам нужно установить номер строки, которую вы хотите получить, используя setRowKey(selectionKey), прежде чем вызывать getRowData(), чтобы получить реальный объект.Таким образом, dataTable.setRowKey(selectionKey) используется для получения выбранных InventoryItem из UIExtendedDataTable, чтобы поместить их в selectionItems (который будет отображаться в поле «Выбранные строки», которое находится помимо расширенной таблицы).Для целей Object originalKey = dataTable.getRowKey(); и dataTable.setRowKey(originalKey); вы можете обратиться к этой ссылке .

В richfaces 3.3 я нахожу, что UIExtendedDataTable имеет метод setActiveRowKey (), который, по-видимому, может устанавливать активную запись.Но он удален в последней версии richfaces 4.0 CR1. Так что, возможно, вы можете использовать java-скрипт UIExtendedDataTable для достижения того же эффекта.

Сначала вы определяете свойство int с именем boldRow в вашем MBean.Затем у вас будет <a4j:commandButton> для вызова метода Mbean. Этот метод назначит номер строки, которую вы хотите выбрать в соответствии с вашей логикой.Атрибут oncomplete кнопки должен вызывать API JavaScript UIExtendedDataTable, чтобы выбрать строку с номером строки, равным 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>
...