Vaadin Widgetset编译 - 实现外部接口的Widget

时间:2011-10-12 18:26:44

标签: gwt vaadin

我们正在尝试使用自定义Vaadin小部件来实现MVP模式。为了避免重复接口,我们的第一种方法是使Vaadin服务器端组件实现视图接口。 但是当我编译widgetset时,我收到以下错误:

Widgetset does not contain implementation for com.enterprise.designer.vaadin.widget.workflow.Workflow. Check its @ClientWidget mapping, widgetsets GWT module description file and re-compile your widgetset. In case you have downloaded a vaadin add-on package, you might want to refer to add-on instructions. Unrendered UIDL:
com.enterprise.designer.vaadin.widget.workflow.Workflow(NO CLIENT IMPLEMENTATION FOUND) id=PID2 caption=Editorongo actionCount=1 workflowAction_0_id=1 workflowAction_0_name=addStartNode workflowAction_0_y=75.0 workflowAction_0_x=50.0

如果我评论界面(和导入)它可以正常工作,即使我在构建widgetset后取消注释它们。代码(使用import / implements评论)如下所示:

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
//import com.enterprise.designer.workflow.presenter.WorkflowDrawArea;
//import com.enterprise.platform.i18n.api.Language;
//import com.enterprise.platform.mvp.api.ViewEventNotifier;
//import com.enterprise.platform.r13n.api.Region;
//import com.enterprise.vaadin.mvp.VaadinView;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.Resource;
import com.vaadin.ui.AbstractComponent;
import com.vaadin.ui.Component;

@com.vaadin.ui.ClientWidget(com.enterprise.designer.vaadin.widget.workflow.client.ui.VWorkflow.class)
public class Workflow extends AbstractComponent 
//implements WorkflowDrawArea.Display, VaadinView 
{
. . .

日志没有显示任何错误(验证api的源除外,但是当我评论界面时显示相同的错误并且它正常工作)。我尝试编译Eclipse插件和命令行。

有什么想法吗?提前谢谢。

Crosspost:https://vaadin.com/forum/-/message_boards/view_message/817539

2 个答案:

答案 0 :(得分:0)

我找到了解决方法。如果我为窗口小部件创建一个中间类,它编译好。并且创建该窗口小部件的子类并使用它形成Vaadin应用程序工作正常,所以我可以使这样的子类从外部项目实现接口:

 ________________________________
|com.vaadin.ui.AbstractComponent |
|________________________________|
              ^
             /|\
              |
              |
 ____________________________________________
|com.enterprise.designer.vaadin.widget.Dummy |
|--------------------------------------------|
|     <@com.vaadin.ui.ClientWidget >         |
|____________________________________________|
         ^
        /|\   ______________________________________
         |   | com.enterprise.vaadin.mvp.VaadinView |
         |   |______________________________________|
         |                         ^
         |                        /|\
         |                         | implements
         |                         |
 _________________________________________________________
| com.enterprise.designer.vaadin.widget.workflow.Workflow |
|_________________________________________________________|
    |
    |                  ________________________
    |                 | com.vaadin.Application |
    |uses             |________________________|
    |                           ^
    |                          /|\
    |                           |
    |                           |
 _____________________________________________________
| com.enterprise.designer.vaadin.widget.MyApplication |
|_____________________________________________________|

在此图中,Dummy是Vaadin小部件(实现paintContent方法),Workflow是实现其他项目(VaadinView)的接口的子类。 Vaadin应用程序(MyApplication)直接使用Worflow类。

然而,如果没有这种解决方法,解决问题会很好:)

答案 1 :(得分:0)

如果您认为“没有找到客户端实现”,则表示在widgetset编译期间出现了一些错误。我有同样的问题,并发症是可以的,但对应用没有影响。调试后我发现问题,在我的应用程序中使用了drools库,在这个lib里面是与gwt-dev库中同名的编译器,在widgetset编译期间,编译器使用错误的类来编译widgetset,结果widgetset编译时出错。应用程序中的Drools库应该包含在所有时间,只有解决此问题的方法是手动编译widgetset。如果您使用Eclipse,则应在模块中添加新的“Java应用程序”:

项目:{您的项目}

主要课程:com.google.gwt.dev.Compiler

程序参数:-gen {您的项目位置(如C:\ workspace ** )} \ target.generated -logLevel INFO-style OBF -war {您的项目位置} \ src \ main \ webapp \ VAADIN \ widgetsets -localWorkers 4 {java包中的项目自定义widgetset位置(如com。 ***。widgetset.CustomWidgetset)}

在“Libraries”中的项目类路径中,在所有库之上添加外部jar gwt-dev-2.3.0.jar(或其他版本),这只需要确保编译器采用正确的java类并且在所有可用文件夹字段“包含:* / .java”的“源”更改为“包括:(全部)”

它应该有助于解决您的问题。