Получение java.lang.NoClassDefFoundError: com/vaadin/data/ Свойство с использованием Metawidget с Vaadin

Я пытаюсь использовать Metawidget с Vaadin и получаю следующую ошибку при запуске моего кода

java.lang.NoClassDefFoundError: com/vaadin/data/Property

Я использую Vaadin 8 и Metawidget 4.2 (последний доступный выпуск). Я отследил исключение к коду ниже в org.metawidget.vaadin.ui.widgetprocessor.binding.simple.SimpleBindingProcessor

    // SimpleBindingProcessor only binds to Property components (TextFields, Labels, etc)

    if ( !( component instanceof Property ) ) {
        return component;
    }

Я проверил Vaadin API и интерфейс com.vaadin.data.Property существует в Vaadin 7.x, но не в 8.x. Похоже, что Metawidget не был портирован для работы с Vaadin 8.x и выше. Я использовал Metawidget с Java Swing, и я очень доволен предложенным им повышением производительности, и я хотел бы использовать его и с Vaadin. Я ищу предложения о том, как поступить. (Вероятно, вопросы со 2 по 5 для @Richard Kennard / @Loghman Barari)

  1. Кто-нибудь использовал Metawidget с Vaadin 8.x и выше? Каковы усилия по расширению Metawidget и внесению необходимых изменений?
  2. Планируется ли выпуск новой версии Metawidget с поддержкой Vaadin 8.x и выше?
  3. Могу ли я использовать класс, который уже является частью Metawidget, о котором я не знаю?
  4. В продолжение вопроса 1, могу ли я получить представление о тех усилиях, которые необходимы для миграции, чтобы я мог попытаться улучшить Metawidget для поддержки Vaadin8.x и выше?
  5. Мой единственный вариант использовать Vaadin 7.x?

Мой код ниже

@Theme("mytheme")
public class MyUI extends UI {

    @Override
    protected void init(VaadinRequest vaadinRequest) {

    VerticalLayout layoutPlaceHolder = new VerticalLayout();
    VaadinMetawidget myMetawidget = new VaadinMetawidget();

    Person p = new Person("Mr", "Pramod C S", 40, false);
    myMetawidget.setToInspect(myMetawidget);

    layoutPlaceHolder.addComponent(myMetawidget);

    setContent(layoutPlaceHolder);
    }

    @WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
    @VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
    public static class MyUIServlet extends VaadinServlet {
    }
}

Код класса Person ниже

import org.metawidget.inspector.annotation.UiSection;

public class Person {
    private String title;
    private String  name;
    private int     age;
    private boolean retired;

    public Person() {
        // TODO Auto-generated constructor stub
    }
    public Person(String title, String name, int age, boolean retired) {
        this.name = name;
        this.age = age;
        this.retired = retired;
        this.title = title;
    }

    public String getName() { return name; }
    public void setName( String name ) { this.name = name; }

    public int getAge() { return age; }
    public void setAge( int age ) { this.age = age; }

    @UiSection(value = { "Test" }) 
    public boolean isRetired() { return retired; }
    public void setRetired( boolean retired ) { this.retired = retired; }

    public String getTitle() { return title;}
    public void setTitle(String  title) {this.title = title;}
}

2 ответа

По-видимому, пока что не было новых выпусков Metawidget, основанных на истории их версий, и, таким образом, отсутствует поддержка последних фреймворков, включая новые версии Vaadin. Однако есть пара альтернатив

С Vaadin 8 вы можете использовать надстройку пользовательского интерфейса Crud, а с платформой Vaadin (требуется версия 12 или более новая) появился новый компонент Vaadin Crud, который не совсем одинаков, но нацелен на использование в тех же случаях использования.

Metawidget все еще разрабатывается (хотя и гораздо медленнее), но я лично больше фокусируюсь на JavaScript-фреймворках (таких как Vue). Однако я бы хотел, чтобы кто-то взял на себя мантию и портировал Metawidget на Vaadin 8!

С точки зрения "сколько работы" весь исходный код VaadinMetawidget составляет всего пару тысяч строк (включая пробелы и комментарии), так что, вероятно, не слишком много. Большая часть функциональности обрабатывается вспомогательным классом Pipeline. Если у вас есть опыт портирования компонентов Vaadin 7 на Vaadin 8, это должно (надеюсь) быть простым.

С Уважением,

Ричард.

Другие вопросы по тегам