我正在尝试将 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 的)
- 有没有人在 Vaadin 8.x 及更高版本中使用过 Metawidget?扩展 Metawidget 并进行必要更改的努力是什么?
- 是否有计划发布支持 Vaadin 8.x 及更高版本的 Metawidget 新版本?
- 是否有一个我可以使用的类已经是 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;}
}