Widgetset不包含实现

时间:2015-12-26 10:09:22

标签: maven gwt intellij-idea jetty vaadin

我正在尝试创建一个自定义小部件,它将模仿类似于Vaadin中的Android / Polymer的导航抽屉。但是我一直遇到几个错误,例如:

  

Widgetset' X'不包含' Y'的实施。检查其组件连接器的@Connect映射,widgetsets GWT模块描述文件并重新编译您的widgetset。如果您下载了vaadin附加软件包,则可能需要参考附加说明。

我在以下文件结构中设置了我的自定义小部件,正如我在Ch中所读到的那样。 Vaadin书中的16,文件结构要求客户' package包含在.gwt.xml的级别:

 src/main/my/domain/core/views/drawerpanel
 |---DrawerPanel.java
 |---DrawerPanelWidgetSet.gwt.xml
 |---client
        |----DrawerPanelClientRpc.java
        |----DrawerPanelConnector.java
        |----DrawerPanelLisetener.java
        |----DrawerPanelServerRpc.java
        |----DrawerPanelState.java
        |----VDrawerPanel.java

但是,当Connector在客户端软件包中时,编译器一直抱怨无法跟踪DrawerPanel的文件路径或无法找到Type DrawerPanel。这只能通过将Connector从客户端移出到.gwt.xml级别来解决。

感谢任何帮助。

更新

我已将DrawerPanel.java移动到src / main / my / domain / core / views和DrawerPanelWidgetset.gwt.xml到src / resources目录。 它已停止抱怨Connector现在无法在编译时跟踪文件路径。不幸的是,仍然收到Widgetset' X'不包含' Y'的实施然而,在运行时。

2 个答案:

答案 0 :(得分:2)

要调试此类问题,首先应该看看GWT编译器输出中是否提到了DrawerPanelConnector

如果提到,问题可能是您的@Connect注释中定义的类与您在服务器上使用的类不同。这可能是由例如如果你偶然从其他包中导入一个具有相同名称的类。

在这种情况下,另一个潜在原因是您没有使用正确的widgetset,或者您的浏览器由于某种原因获得了它的旧缓存版本(由浏览器缓存或因为最新版本未部署到您的服务器)。您可以通过查看浏览器加载的[hexcode].cache.js文件的名称(通过查看浏览器开发人员工具中的网络选项卡)并验证编译器输出文件夹中是否存在相同的文件来跟踪此情况。 / p>

如果日志中未提及您的连接器,则由于某种原因,GWT编译器无法获取该连接器。这可能是例如因为类位于GWT编译器不查看的文件夹中,因为类上没有@Connect注释,或者连接器类(或连接器类使用的其他类)包含的内容GWT不支持。

要调试这种情况,使用-strict选项运行GWT编译器会有所帮助。这使得编译器将所有发现的问题视为错误,而不是假设该类不是用于客户端使用。

如果添加-strict不会导致任何新错误,则应验证GWT编译器是否完全找到了连接器类。您可以使用某些与您的课程不兼容的API进行检查,例如: System.load("")。如果没有得到任何错误(仍然启用-strict),这意味着编译器甚至不会查看该类。在这种情况下,您需要验证您的目录结构是否正确,以及您实际上是在编译DrawerPanelWidgetSet

最后,如果代码中-strictSystem.load("")结合导致GWT编译器出错,但忽略System.load("")会使编译成功,而不会在编译器输出,那么我能想象的唯一原因是连接器类中缺少@Connect注释。

答案 1 :(得分:0)

窗口小部件编译的问题是错误不够清晰。 因此,您可以尝试将-trace传递给编译器,以便打印出有关后台发生情况的更多详细信息。

确保不要在Connector,State中使用原始类型。 使用Short类型也会导致编译小部件时出错,编译器不会显示明确的错误。