使用Metawidget和Vaadin获取java.lang.NoClassDefFoundError:com / vaadin / data / Property

时间:2018-10-17 07:31:01

标签: vaadin8 vaadin10 metawidget

我正在尝试将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. 有人使用过Vaadin 8.x及更高版本的Metawidget吗?扩展Metawidget并进行必要更改的工作是什么?
  2. 是否有计划发布支持Vaadin 8.x及更高版本的Metawidget新版本?
  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 :(得分:1)

显然,暂时没有基于它们的version history的Metawidget的新版本,因此缺乏对包括新Vaadin版本在内的最新框架的支持。但是,还有其他几种选择

使用Vaadin 8,您可以使用Crud UI add-on,而通过Vaadin Platform(需要v12或更高版本),可以使用新的Vaadin Crud组件,它们并非完全相同,但旨在帮助相同的用例。

答案 1 :(得分:0)

Metawidget仍在开发中(尽管速度要慢得多),但我个人更专注于JavaScript框架(如Vue)。但是,我希望有人能够承担起重任,将Metawidget移植到Vaadin 8!

就“多少工作”而言,VaadinMetawidget的整个源代码只有几千行(包括空格和注释),所以可能不会太多。大多数功能由Pipeline helper类处理。如果您有将Vaadin 7组件移植到Vaadin 8的经验,那么(希望)应该很简单。

此致

理查德。