How can I get Wicket 7 to work with java.time with Java 8?

I have many beans and they all use LocalDate and LocalDateTime. DateTextField in Wicket and all other widgets (e.g. DatePicker) only work with java.util.Date. Is there a way to insert a converter in Wicket 7 so that it uses LocalDate or LocalDateTime?

beans looks like this:

public class SomeBean {
  Long id = null;
  LocalDate since = null;
  // plus getters and setters
}

Wicket form currently uses CompoundPropertyModel

CompoundPropertyModel<SomeBean> model = new CompundPropertyModel<>( bean );
+4
source share
3 answers

You can wrap your models LocalDate, etc. in IModel<java.util.Date>for example

public static class LocalDateModel implements IModel<java.util.Date> {
    private IModel<LocalDate> localDateModel;
    public LocalDateModel(IModel<LocalDate> localDateModel){
        this.localDateModel = localDateModel;
    }


    @Override
    public Date getObject() {
        return convertLocalDateToUtilDateSomehow(localDateModel.getObject());
    }

    @Override
    public void setObject(Date object) {
        localDateModel.setObject(convertUtilDateToLocalDateSomehow(object));
    }

    @Override
    public void detach() {
        localDateModel.detach();
    }
}

If you then load such models into the form components that you want to use, they should work fine.

, CompoundPropertyModel , CompoundPropertyModel#wrapOnInheritance(Component component), . -

@Override
public <C> IWrapModel<C> wrapOnInheritance(Component component)
{
    IWrapModel<C> actualModel = super.wrapOnInheritance(component);
    if (actualModel.getObject() instanceOf LocalDate) {
        return new LocalDateModelButAlsoWrapping(actualModel);
    } else {
        return actualModel;
    }
}

LocalDateModelButAlsoWrapping LocalDateModel , IWrapModel<T>.

CompoundPropertyModel, , LocalDate, (, DateTextField), , java.util.Date.

, , (, , ), , , (, , Component DateTextField), , .

+3

:

https://ci.apache.org/projects/wicket/guide/7.x/guide/forms2.html#forms2_3

@Override
protected IConverterLocator newConverterLocator() {
    ConverterLocator defaultLocator = new ConverterLocator();

    defaultLocator.set(Pattern.class, new RegExpPatternConverter());

    return defaultLocator;
}

: https://issues.apache.org/jira/browse/WICKET-6200

0

Wicket 8. : https://issues.apache.org/jira/browse/WICKET-6200 (AbstractJavaTimeConverter ..) , LocalDate, LocalDateTime, LocalTime ..)

, DateTextField, Date. , Label TextField , , :

@Override
protected IConverterLocator newConverterLocator() {
    ConverterLocator converterLocator = new ConverterLocator();
    converterLocator.set(LocalDateTime.class, new LocalDateTimeConverter());
    converterLocator.set(LocalDate.class, new LocalDateConverter());
    converterLocator.set(LocalTime.class, new LocalDateConverter());
    return converterLocator;
}
0

Source: https://habr.com/ru/post/1652571/


All Articles