Мне нужна помощь с проблемой.
У меня есть приложение, которое отображает данные из базы данных.
В базе данных я использую один столбец для идентификации объекта с изменениями во времени (версия объекта).
Я имею в виду, что строки имеют разные идентификаторы, но один и тот же OBJECT_ID.
Они также различаются по столбцам DATE достоверности (VALID_FROM и VALID_TO), поэтому я могу найти правильную версию объекта в выбранное время.
Когда страница показывается пользователю, он устанавливает ДАТУ для отображения данных.
На странице есть форма с полями выбора (их элементы являются объектами из базы данных).
Мне нужно показать только элементы, которые удовлетворяют условию действия.
Все хорошо до обработки формы.
Я использую пользовательский конвертер, который преобразует значение String (идентификатор строки в таблице базы данных) в объект моей модели, но мне нужно два значения, чтобы найти строку. (ID и ДАТА из формы пользователя).
Метод преобразователя getAsObject получает только один параметр VALUE (идентификатор из поля выбора).
Как заставить работать второй параметр?
Могу ли я найти его из Бина или из входного объекта JSF?
Если есть какой-то способ, который включает использование , есть ли способ установить с помощью кода Java в Bean? (Форма генерируется методом бобов).
Прошу прощения за мой английский, я стараюсь изо всех сил: о)
P.S .: Параметр даты важен в sqlMap, потому что используется JOIN. Я ищу по идентификатору, но другие таблицы объединены OBJECT_ID (версия) => и мне нужно получить только одну строку
Спасибо за ответы и хорошего дня
Worsik
Edit:
Ящики для выбора генерируются по этому коду:
uiInput = new HtmlSelectOneMenu();
UISelectItems items = new UISelectItems();
items.setValueExpression("value", createValueExpression(
"#{myBean.referencedList." + item.getName() + "}",
List.class));
uiInput.getChildren().add(items);
Метод конвертера выглядит так:
public Object getAsObject(FacesContext context, UIComponent component, String value)
{
if (value.equals("")) {
return null;
}
Class entityType = component.getValueExpression("value").getType(
FacesContext.getCurrentInstance().getELContext());
// TODO: need to get date value from form
Date day = new Date();
return myService(context).findEntityById(entityType, Long.valueOf(value), day);
}
entityType - класс модели для объекта из базы данных
myService вызывает объект Dao, а sqlMap называется
select * from object_table as t1
JOIN other_table as t2 ON t1.object_fk = t2.object_id // (or version_id)
where t1.id = #id:INTEGER#
and t2.valid_from <= #day:DATE#
and t2.valid_to >= #day:DATE#