1

TL;DR:为了调试客户端,我运行了gwt:run目标,在 Chrome 上启动了应用程序,登录后,它抛出了下面的异常,并且 GWT 开发模式没有启动(没有客户端断点工作)

    javax.el.ELException: /pages/common/gwt/commonLayoutGWT.xhtml: setAttribute: Non-serializable attribute with name sessionBean
        at com.sun.faces.facelets.compiler.TextInstruction.write(TextInstruction.java:90)
        at com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:82)
        at com.sun.faces.facelets.compiler.UILeaf.encodeAll(UILeaf.java:183)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
        at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456)
        ...

我应该怎么做,或者我应该检查什么才能让我的 GWT 开发模式正常工作?


一些背景:以前,我们的团队使用一些 ant 脚本来编译、调试(服务器和客户端代码)、运行和部署我们的主应用程序。尽管过程非常繁琐且手动,但它可以毫无问题地工作。几个月前我们决定把它变成一个 Maven 应用程序,并且在使用 Maven 之后我们能够成功地执行所有操作/目标。编译、运行和部署应用程序变得快速和方便,这是我们的目标。

但是直到现在我们还没有注意到在这个过程中的某个时刻,我们的客户端调试停止了工作。只有在我们收到一些错误报告并开始尝试调试它们之后,我们才注意到这个问题。所以现在我需要设置 GWT 开发模式,无论我尝试了什么都无法做到。

  1. 我正在与:

    • SmartGWT 4.0
    • JDK 1.8.0_121
    • GWT Eclipse 插件 2.8.0
    • 玻璃鱼 4.1
    • Maven 3.3
  2. 我尝试按照gwtproject的一些说明,使用默认链接器xsiframe进入gwt.xml文件。

  3. 但是当我执行gwt:compile目标时,出现了这个错误:

    [INFO] Linking into D:\Development\Repos\Git\Java\MyApp\myApp\target\classes\..\..\..\myApp\WebContent\pages\module\gwt\com.myapp.client.gwt.MyAppClient
    [INFO]    Invoking Linker Cross-Site-Iframe
    [INFO]       [ERROR] The Cross-Site-Iframe linker does not support <script> tags in the gwt.xml files, but the gwt.xml file (or the gwt.xml files which it includes) contains the following script tags: 
    
  4. 为了解决这个问题,我使用了错误本身推荐的解决方案之一:“ ...将此属性添加到gwt.xml文件中:<set-configuration-property name='xsiframe.failIfScriptTag' value='FALSE'/>

  5. gwt:compile再次运行,它成功完成

4

1 回答 1

3

我建议在单独的服务器中运行您的服务器端代码(可以是mvn jetty:run),并仅为客户端代码运行 GWT 开发模式(使用<noserver>true</noserver>)。

这解决了很多问题(在 DevMode 的嵌入式服务器中运行 webapps),这是现在推荐的设置。

于 2018-07-26T19:13:54.400 回答