2011-10-12 61 views
0

我们试图使用自定义Vaadin小部件来实现MVP模式。为了避免重复接口,我们的第一种方法是使Vaadin服务器端组件实现视图接口。 但是当我编译视窗元件,我得到了以下错误: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 

如果我评论的接口(和进口)它工作正常,即使我去掉他们建立视窗元件之后。代码(与输入/工具评论)如下所示:

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

回答

0

我找到了一个解决方法。如果我为这个小部件创建一个中间类,它编译OK。并创建一个子类,窗口小部件,并用它形成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 | 
|_____________________________________________________| 

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

然而,这将是很好的解决问题,而这种解决方法:)

0

如果你得到一些认为像“没有发现任何客户端实现”,是否意味着在视窗元件汇编了一些错误。我有同样的问题,并发症是好的,但对应用程序没有影响。调试后发现问题,在我的应用程序中使用了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)}

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

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