Получение 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)
- Кто-нибудь использовал Metawidget с Vaadin 8.x и выше? Каковы усилия по расширению Metawidget и внесению необходимых изменений?
- Планируется ли выпуск новой версии Metawidget с поддержкой Vaadin 8.x и выше?
- Могу ли я использовать класс, который уже является частью Metawidget, о котором я не знаю?
- В продолжение вопроса 1, могу ли я получить представление о тех усилиях, которые необходимы для миграции, чтобы я мог попытаться улучшить Metawidget для поддержки Vaadin8.x и выше?
- Мой единственный вариант использовать 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, это должно (надеюсь) быть простым.
С Уважением,
Ричард.