Получение java.lang.NoClassDefFoundError: com / vaadin / data / Свойство с использованием Metawidget с Vaadin - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь использовать 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;
    }

Я проверил API Vaadin, и интерфейс 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 ]

0 голосов
/ 19 октября 2018

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

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

С уважением,

Ричард.

0 голосов
/ 17 октября 2018

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

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

...