Фильтр по TemporalType.TIME

Здраствуйте. Если создать сущность с полем времени (класс java.util.Date) и аннотацией @Temporal(TemporalType.TIME), то у фильтра при выборе данного поля будет DateField, а не TimeField, можно это как-то исправить?

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

Для данной проблемы уже заведен тикет на Github.

В качестве обходного решения можно использовать следующий вариант:

  1. Создать в модуле web новый компонент - класс-наследник от com.haulmont.cuba.gui.components.filter.Param:
package com.company.prname.web.component.filter;

import com.haulmont.chile.core.datatypes.Datatype;
import com.haulmont.cuba.gui.components.Component;
import com.haulmont.cuba.gui.components.filter.Param;

public class ExtParam extends Param {

    public ExtParam(Builder builder) {
        super(builder);
    }

    protected Component createDatatypeField(Datatype datatype, ValueProperty valueProperty) {
        Component component = super.createDatatypeField(datatype, valueProperty);

        Datatype<Object> propertyDatatype = property.getRange().asDatatype();
        if (java.sql.Time.class.equals(propertyDatatype.getJavaClass())) {
             component = createTimeField(propertyDatatype.getJavaClass(), valueProperty);
        }

    return component;
    }
}
  1. Зарегистрировать созданный бин в web-spring.xml:
      <bean name="cuba_FilterParam"
      class="com.company.prname.web.component.filter.ExtParam"
      scope="prototype"/>
  1. Перезапустить проект

Результат выглядит следующим образом:
image

С уважением,
Надежда.

1 симпатия

Надежда, спасибо. Но у нас в качестве класса времени выступает java.util.Date с аннотацией @Temporal(TemporalType.TIME), так что ваш пример слегка не подходит. Сделали так

    override fun createDatatypeField(datatype: Datatype<*>, valueProperty: ValueProperty): Component {
        if (dateTimeClasses.contains(javaClass) &&
            property.annotations.asSequence().firstOrNull { it.key == "cuba.temporal" }?.value == TemporalType.TIME) {
            return createTimeField(javaClass, valueProperty)
        }

        return super.createDatatypeField(datatype, valueProperty)
    }

В тестовом проекте использовался именно этот класс времени

java.util.Date с аннотацией @Temporal(TemporalType.TIME)

и фильтр корректно отработал.