0

我正在尝试将 Metawidget 与 Vaadin 一起使用,并在运行代码时出现以下错误

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

我正在使用Vaadin 8Metawidget 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;}
}
4

2 回答 2

1

显然,根据版本历史, Metawidget 暂时没有新版本,因此缺乏对包括新 Vaadin 版本在内的最新框架的支持。但是有几种选择

使用 Vaadin 8,您可以使用Crud UI 插件,而使用 Vaadin 平台(需要 v12 或更高版本)有新的Vaadin Crud组件,它们不完全相同,但旨在帮助相同的用例。

于 2018-10-17T10:27:52.087 回答
0

Metawidget 仍在开发中(尽管速度要慢得多),但我个人更关注 JavaScript 框架(如 Vue)。但是,我希望有人能够接手并将 Metawidget 移植到 Vaadin 8!

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

于 2018-10-18T21:33:57.870 回答