В ADF есть также возможность создавать декларативные компоненты, которые могут быть очень полезными. В своем примере покажу компонент выбора различных значений в относительно свободном стиле расположения элементов.
Такое расположение может быть удобно, когда надо выбрать быстро элемент (значение), но при этом еще хочется отличиться например оригинальностью, т.е. не использовать стандартные компоненты (ComboBox, ListBox, и др.), или например они не очень вписываются в дизайн.
Здесь я покажу приложение с использованием компоненты - FreeStyleGrid, с различными вариантами формирования списков.
Компонент подключается к проекту через Resource Palette
После чего можно убедится что она подключена в свойствах проекта.
Также компонента появится в Component Palette
Компонента принимает на вход коллекцию данных следующих типов
oracle.adf.view.rich.model.CollectionModel, java.util.List , array, javax.faces.model.DataModel
для построения элементов, в качестве элемента сейчас используется - javax.faces.model.SelectItem. Для настройки расположения используются атрибуты - Columns, Rows. Выбор происходит кликом мыши.
Пример компоненты на страницы:
<freeStyleGrid:freeStyleGrid id="fsg1" onSelect="#{pageBean.select}" items="#{pageBean.items}"
Columns="#{bindings.Cl.inputValue}" Rows="#{bindings.Rw.inputValue}">
</freeStyleGrid:freeStyleGrid>
Бин - поставщик данных.
public class Component
{
public Component()
{
super();
// тестовые данные
items.add(new SelectItem(new Integer(1), "2000"));
items.add(new SelectItem(new Integer(2), "2001"));
items.add(new SelectItem(new Integer(3), "2002"));
items.add(new SelectItem(new Integer(4), "2003"));
items.add(new SelectItem(new Integer(5), "2004"));
items.add(new SelectItem(new Integer(6), "2006"));
items.add(new SelectItem(new Integer(7), "2007"));
items.add(new SelectItem(new Integer(8), "2008"));
}
private List<SelectItem> items = new ArrayList<SelectItem>();
public List<SelectItem> getItems()
{
return items;
}
Обработка выбранного элемента происходит в этом же бине
/**
* Снять выделение всех элементов
*/
private void reset()
{
for (SelectItem item: items)
{
item.setNoSelectionOption(true);
}
}
/**
* Выделить элемент по ИД
* @param value
*/
private void selectByValue(Object value)
{
for (SelectItem item: items)
{
if (item.getValue().equals(((Double) value).intValue()))
{
item.setNoSelectionOption(false);
System.out.println("select item:" + item.getValue());
}
}
}
/**
* Событие выбора элемента
* @param clientEvent
*/
public void select(ClientEvent clientEvent)
{
Map<String, Object> params = clientEvent.getParameters();
System.out.println("value:" + params.get("param"));
System.out.println(params.get("param").getClass());
reset();
selectByValue(params.get("param"));
}
Меняя атрибуты - Columns, Rows можно добиться разного расположения элементов
Примеры:
1. Таблица. col = 4, row=3
2. Горизонтальное расположение. col=8, row=1
3. Вертикальное расположение. col=1, row=8
Источник
ADF Declarative Components
http://download.oracle.com/tutorials/jtcd3/ecourse_adf_part2/camtasiasource/module4/tryit/declarativecomponents/declarativecomponents.html
Исходник приложение без исходника компоненты.
Исходник компоненты будет позже.
Комментариев нет:
Отправить комментарий