Здраствуйте. Если создать сущность с полем времени (класс java.util.Date
) и аннотацией @Temporal(TemporalType.TIME)
, то у фильтра при выборе данного поля будет DateField
, а не TimeField
, можно это как-то исправить?
Здравствуйте!
Для данной проблемы уже заведен тикет на Github.
В качестве обходного решения можно использовать следующий вариант:
- Создать в модуле 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;
}
}
- Зарегистрировать созданный бин в
web-spring.xml
:
<bean name="cuba_FilterParam"
class="com.company.prname.web.component.filter.ExtParam"
scope="prototype"/>
- Перезапустить проект
Результат выглядит следующим образом:
С уважением,
Надежда.
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)
и фильтр корректно отработал.