我正在尝试创建一个自定义小部件,它将模仿类似于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'的实施然而,在运行时。
答案 0 :(得分:2)
要调试此类问题,首先应该看看GWT编译器输出中是否提到了DrawerPanelConnector
。
如果提到,问题可能是您的@Connect
注释中定义的类与您在服务器上使用的类不同。这可能是由例如如果你偶然从其他包中导入一个具有相同名称的类。
在这种情况下,另一个潜在原因是您没有使用正确的widgetset,或者您的浏览器由于某种原因获得了它的旧缓存版本(由浏览器缓存或因为最新版本未部署到您的服务器)。您可以通过查看浏览器加载的[hexcode].cache.js
文件的名称(通过查看浏览器开发人员工具中的网络选项卡)并验证编译器输出文件夹中是否存在相同的文件来跟踪此情况。 / p>
如果日志中未提及您的连接器,则由于某种原因,GWT编译器无法获取该连接器。这可能是例如因为类位于GWT编译器不查看的文件夹中,因为类上没有@Connect
注释,或者连接器类(或连接器类使用的其他类)包含的内容GWT不支持。
要调试这种情况,使用-strict
选项运行GWT编译器会有所帮助。这使得编译器将所有发现的问题视为错误,而不是假设该类不是用于客户端使用。
如果添加-strict
不会导致任何新错误,则应验证GWT编译器是否完全找到了连接器类。您可以使用某些与您的课程不兼容的API进行检查,例如: System.load("")
。如果没有得到任何错误(仍然启用-strict
),这意味着编译器甚至不会查看该类。在这种情况下,您需要验证您的目录结构是否正确,以及您实际上是在编译DrawerPanelWidgetSet
。
最后,如果代码中-strict
与System.load("")
结合导致GWT编译器出错,但忽略System.load("")
会使编译成功,而不会在编译器输出,那么我能想象的唯一原因是连接器类中缺少@Connect
注释。
答案 1 :(得分:0)
窗口小部件编译的问题是错误不够清晰。 因此,您可以尝试将-trace传递给编译器,以便打印出有关后台发生情况的更多详细信息。
确保不要在Connector,State中使用原始类型。 使用Short类型也会导致编译小部件时出错,编译器不会显示明确的错误。