Изменение значений параметров компонента Filter при подстановке в запрос

Здравствуйте!

Подскажите, есть ли возможность изменять значения параметров компонента Filter при их подстановке в JPQL-запрос?

Поясню на конкретном примере. Предположим, создано произвольное условие фильтрации с выражением вида {E}.objectName like ?. Пользователь в интерфейсе выбирает это условие и вводит в качестве параметра любую строку (например, тест). Хотелось бы, чтобы при подстановке в запрос эта строка поменялась на %тест% (или на (?i)%тест%, как говорит соответствующий раздел документации), то есть чтобы пользователю не нужно было самостоятельно писать wildcard’ы в интерфейсе.

При этом такая подмена не должна повлиять на вид строки в интерфейсе (там должно остаться в точности то, что ввел пользователь), поэтому использовать API для работы с параметрами фильтра в данном случае невозможно. Судя по всему, нужно установить в фильтр обработчик com.haulmont.cuba.gui.components.Filter.BeforeFilterAppliedHandler, который сработает перед фильтрацией, но как из него подменить параметр - пока не разобрался.

Заранее спасибо!

Добрый день.
Если это единственная задача, возможно стоит просто поменять запрос на {E}.objectName like concat('%', ?, '%') или lower({E}.objectName) like concat('%', lower(?), '%') соответственно.

1 симпатия

Иван, большое спасибо за рецепт для конкретного кейса! Почему-то я постоянно про JPQL-функции забываю…

Но было бы интересно решить эту задачку и для общего случая.