【问题标题】:Widgetset does not contain implementationWidgetset 不包含实现
【发布时间】:2015-12-26 10:09:21
【问题描述】:

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

小部件集“X”不包含“Y”的实现。检查其组件连接器的@Connect 映射、widgetsets GWT 模块描述文件并重新编译您的widgetset。如果您已经下载了 vaadin 插件包,您可能需要参考插件说明。

我已经在以下文件结构中设置了我的自定义小部件,正如我在 Ch. Vaadin 的第 16 条文件结构要求“客户端”包处于 .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

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

感谢任何帮助。

更新

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

【问题讨论】:

    标签: maven gwt intellij-idea jetty vaadin


    【解决方案1】:

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

    如果提到了,问题可能是你@Connect注解中定义的类和你在服务器上使用的不是同一个类。这可能是由于例如如果您不小心从其他包中导入了同名的类。

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

    如果日志中未提及您的连接器,则由于某种原因,GWT 编译器未选择该连接器。这可能是例如因为该类位于 GWT 编译器不查看的文件夹中,因为该类上没有 @Connect 注释,或者因为连接器类(或连接器类使用的其他一些类)包含的东西不是' t 受 GWT 支持。

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

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

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

    【讨论】:

      【解决方案2】:

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

      确保不要在连接器、状态中使用原始类型。 同样使用 Short 类型会导致编译小部件时出错,并且编译器不会向您显示明确的错误。

      【讨论】:

      • 删除状态/连接器中的原语并没有解决问题。
      • 您是否尝试将 -trace 传递给编译器?
      • 我使用 -X -e 来获取详细的编译时间日志。我在这里没有注意到任何错误,编译器能够自动发现小部件集描述符文件(资源中的.gwt.xml),成功编译排列和链接。有几件事我觉得很奇怪:这个导航抽屉的 gwt.xml 被添加到由原型创建的主 .gwt.xml 中,反之亦然,所以它看起来是一个循环引用,并且 jdk 1.8 在小部件集客户端类中被拒绝,但这与运行时的原始错误无关。
      • 你能发布编译器的日志吗!你在做日食吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-22
      • 2013-09-21
      • 1970-01-01
      • 2016-02-23
      • 2012-02-25
      • 2020-05-21
      • 1970-01-01
      相关资源
      最近更新 更多