我们正在尝试使用自定义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
答案 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”的“源”更改为“包括:(全部)”
它应该有助于解决您的问题。