GWT 发布说明
- 2.12.0 2024 年 10 月 29 日
- 2.11.0 2024 年 1 月 9 日
- 2.10.1 2024 年 1 月 9 日
- 2.10.0 2022 年 6 月 9 日
- 2.9.0 2020 年 5 月 13 日
- 2.8.2 2017 年 10 月 19 日
- 2.8.1 2017 年 4 月 24 日
- 2.8.0 2016 年 10 月 20 日
- 2.8.0 (RC3) 2016 年 9 月 29 日
- 2.8.0 (RC2) 2016 年 8 月 11 日
- 2.8.0 (RC1) 2016 年 7 月 29 日
- 2.8.0 (Beta1) 2015 年 12 月 3 日
- 2.7.0 2014 年 11 月 20 日
- 2.7.0 (RC1) 2014 年 10 月 30 日
- 2.6.1 2014 年 5 月 9 日
- 2.6.0 2014 年 1 月 23 日
- 2.6.0 (RC4) 2014 年 1 月 9 日
- 2.6.0 (RC3) 2013 年 12 月 5 日
- 2.6.0 (RC2) 2013 年 12 月 2 日
- 2.6.0 (RC1) 2013 年 11 月 7 日
- 2.5.1 2013 年 3 月 9 日
- 2.5.1 (RC1) 2013 年 2 月 5 日
- 2.5.0 2012 年 10 月 25 日
- 2.5.0 (RC2) 2012 年 10 月 4 日
- 2.5.0 (RC1) 2012 年 6 月 27 日
- 2.4.0 2011 年 9 月 7 日
- 2.3.0 2011 年 5 月 2 日
- 2.3.0 (M1) 2011 年 4 月 2 日
- 2.2.0 2011 年 2 月 11 日
- 2.1.1 2010 年 12 月 17 日
- 2.1.0 2010 年 10 月 27 日
- 2.1.0 (RC1) 2010 年 10 月 12 日
- 2.1.0 (M3) 2010 年 8 月 25 日
- 2.1.0 (M2) 2010 年 7 月 2 日
- 2.1.0 (M1) 2010 年 5 月 19 日
- 2.0.4 2010 年 6 月 30 日
- 2.0.3 2010 年 2 月 18 日
- 2.0.2 2010 年 2 月 12 日
- 2.0.1 2010 年 2 月 3 日
- 2.0.0 2009 年 12 月 9 日
- 2.0.0 (RC2) 2009 年 11 月 25 日
- 2.0.0 (RC1) 2009 年 11 月 17 日
- 1.7.1 2009 年 9 月 22 日
- 1.7.0 2009 年 7 月 14 日
- 1.6.4 2009 年 4 月 7 日
- 1.6.3 2009 年 3 月 31 日
- 1.6.2 2009 年 3 月 18 日
- 1.5.3 2008 年 10 月 17 日
- 1.5.2 2008 年 8 月 28 日
- 1.5.1 (RC2) 2008 年 8 月 5 日
- 1.5.0 (RC1) 2008 年 5 月 27 日
- 1.4.60 2007 年 8 月 28 日
- 1.4.59 (RC2) 2007 年 8 月 20 日
- 1.4.10 (RC) 2007 年 5 月 29 日
- 1.3.3 2007 年 1 月 18 日
- 1.3.1 (RC)
- 1.2.22
- 1.2.21 (RC)
- 1.1.10
- 1.1.0 (RC)
- 1.0.21
注意 - M1 = 第一个里程碑,RC1 = 第一个候选版本
2.12.0 版本说明
亮点
- 添加了对 Java 12-17 语言功能的支持,包括文本块、instanceof 模式匹配、记录和 switch 表达式。
- 运行任何开发工具都需要 Java 11 或更高版本,尽管服务器代码应该能够继续使用 Java 8 运行此版本。以后的版本可能不再支持 Java 8。
- 添加了对源映射的支持,以包含源文件的内容。
- 在所有浏览器中默认启用源映射
- 修复链接器和开发模式中的 CSP 问题,为 GWT-RPC 负载提供 CSP 解决方案
错误修复
- 删除第一个字符以将参数委托给 CodeServer
- 修复错误 initializeEnumMap() 超出 65535 字节限制
- 放宽命名规则以允许有效的 Java Bean 属性作为 jsproperties
- 允许 SDM 的 Web 服务器重用套接字,而无需等待
- 每个映射的流必须在其内容被放置到下游后关闭
- 修复从 Java 可变参数方法调用的具有可变参数的本机 JsMethods
JRE 模拟
- 添加 Java 10 集合 API
- 添加 Java 9 BigInteger 构造函数
- Normalizer 模拟
- Java 11 的 String 方法模拟,使 Character.isWhitespace 与 Java 11 对齐
- 实现 java.lang.Math.nextAfter、nextUp、nextDown
- 向 Reader.read(…) 方法添加了缺少的 IOException
- 支持注释上的 ElementType MODULE 和 RECORD_COMPONENT
弃用和删除
- 浏览器已弃用
unload
事件,已弃用需要它的调用,并重写了不需要它的调用。已弃用的方法包含有关如何使用更现代的策略替换它们的说明。 - 浏览器已弃用
mousewheel
事件,GWT 中的用法已替换为wheel
事件。这对应用程序应该是透明的。 com.google.gwt.dev.GetJreEmulation
主类已被弃用,计划在将来的版本中删除。com.google.gwt.dev.RunWebApp
主类已被弃用,计划在将来的版本中删除。SpeedTracer
类已弃用,计划在将来的版本中删除/替换。- 已弃用的
-XfragmentMerge
标志不再有任何作用,将在将来的版本中删除。 - 以下已弃用、未使用的标志已删除
-XdisableUpdateCheck
/-XcheckForUpdates
-incrementalCompileWarnings
-Xlibraries
-XoutLibrary
,-Xlibrary
-Xlink
-missingDepsFile
-overlappingSourceWarnings
XstrictResources
,enforceStrictResources
- 以下已弃用、无操作的
main()
类已从 gwt-user 中删除com.google.gwt.user.tools.ApplicationCreator
com.google.gwt.user.tools.ProjectCreator
com.google.web.bindery.requestfactory.server.RequestFactoryJarExtractor
类不再包含在任何发行版 jar 中。
有关更多详细信息,请参阅 提交日志。
2.11.0 版本说明
亮点
- 迁移到 GitHub 拉取请求以进行新的贡献,并在 GitHub Actions 上运行 nightly 构建。
- 为
jakarta.servlet
包添加了发行版工件,用于 RequestFactory 和 GWT-RPC。 - 测试了在 Java 21 上运行的支持。这可能是最后一个支持在 Java 8 上运行的次要版本系列。
- 默认情况下为 GWT-RPC 禁用了 JPA/JDO “增强类” 可序列化,并在使用时添加了警告。
- 更新了 JRE 模拟以支持 Java 11 的集合、流等。
错误修复
- 使自定义字段序列化器准备好用于 Java 17
- 正确地将 Long.toBinaryString 写入为无符号值
- 修复 CodeServer 中响应的 gzip 编码
- 避免 SOYC 中的 EmptyStackException
- 修复 System.getProperty 魔术方法节点的错误报告
- 修复使用 Java 9+ 运行 JettyLauncher 时的 ClassNotFoundException
- 避免 TypeUtils#resolveGenerics 中的 StackOverflowError
- 避免使用 iframe 链接器在 Chrome 中使用 document.write
- 避免在单脚本链接器加载中使用 document.write
- 支持三元表达式和 var 声明中的交集类型
- 修复命名空间=“
” 与变量名称冲突的名称
JRE 模拟
- 添加了新的 Optional 方法:or()、stream()、ifPresentOrElse()、empty() 和 orElseThrow()
- 添加了 List/Set/Map of() 方法
- 添加了 Predicate not() 方法
- 添加了 Collectors 方法:flatMapping()、filtering()、toUnmodifiableList()、toUnmodifiableSet() 和 toUnmodifiableMap()
- 添加了 Stream 方法:dropWhile、takeWhile 和 iterate(seed, hasNext, next)
- 添加了 Enumeration.asIterator()
弃用
- 使用 DevMode 作为应用程序服务器已被弃用,可能会在将来的版本中删除或更改。请将本地开发工作流程迁移到使用通用服务器或自定义 ServletContainerLauncher。
- webAppCreator 工具已被弃用,请参阅 https://gwt.java.net.cn/gettingstarted.html。
其他
- 将 chrome/firefox 全局变量更新到最新版本
- 更新了 Javadoc 以在 Java 9+ 上运行,支持搜索
- 从旧的构建连接中删除了未使用的脚本
有关更多详细信息,请参阅 提交日志。
2.10.1 版本说明
亮点
- 从 2.11 反向移植了一个修复程序,以默认情况下为 GWT-RPC 禁用 JPA/JDO “增强类” 可序列化,并在使用时添加了警告。有关更多信息,请参阅 https://github.com/gwtproject/gwt/issues/9709。
2.10.0 版本说明
亮点
更新至 HtmlUnit 2.55.0 和 Jetty 9.4.44。 随着这个更新的 HtmlUnit 版本,单元测试中加入了对 Promise 的支持,并且在运行测试时可以指定的浏览器字符串有 “FF”、“Chrome”、 “IE”(针对 IE11)、“Edge” 和 “Safari”。
测试了在 Java 17 上运行的支持,放弃了对在 Java 7 上运行的剩余支持。
Maven groupId 正式更改为
org.gwtproject
,项目应注意确保它们使用旧的com.google.gwt:gwt
BOM 或新的org.gwtproject:gwt
BOM,以确保 Maven 或 Gradle 正确处理此更改。 这是使用com.google.gwt
groupId 发布的最后一个版本。放弃了对 IE 8、9 和 10 的支持。
错误修复
- 修正 Long.hashCode 语义。
- 在创建子进程时支持 CLASSPATH 环境变量,修复了 Windows 在使用长参数列表时可能失败的错误。
- 使用 Function.name 而不是 displayName,以在 Chrome 93+ 中支持可见的方法名称。
- 允许在从远程来源加载脚本时,在 Chrome 中使用堆栈跟踪。
JRE 模拟
- 添加 OutputStreamWriter 模拟。
- 支持 StringReader mark() 和 reset() 方法。
- 添加 StrictMath 模拟。
- 添加 BufferedWriter 模拟。
- 添加不完整的 PrintStream 模拟。
- 添加 Charset.defaultCharset() 模拟。
- 改进 BigInteger 模拟性能。
- 使用 performance.now() 模拟 System.nanoTime()。
- 添加 Optional.isEmpty 模拟。
- JRE 模拟改进/简化,以促进 J2CL 的 WASM 支持。 请注意,这些并不总是为 GWT 本身提供具体的改进,但有助于保持代码库的一致性。
其他
- 添加支持在 Java 9+ 中编译 GWT 本身。
- 改进从不使用流的应用程序的编译代码大小,方法是避免从 Throwable 引用流。
有关更多详细信息,请参阅 提交日志.
2.9.0 版本说明
亮点
能够使用 jsinterop-base 1.0.0、elemental2 1.0.0 和 jsinterop-annotations 2.0.0 编译项目。 除 @JsAsync 和 @JsEnum 之外,这使得 GWT2 在这些工具中与 J2CL 兼容。
添加了对 Java 语言级别 9、10 和 11 的支持。
正式放弃了在 Java 7 上运行 GWT 编译器或服务器端工具的支持。 GWT 发行版在此版本中仍编译为在 Java 7 上运行,但不能保证它是否可以正常工作。 未来版本将编译针对 Java 8+ 的字节码。 此版本经过测试,发现使用 Java 8、11 和 14 运行时跨平台正常工作。
弃用
- Elemental 已正式弃用 - 它仍然包含在此版本中,但可能不会出现在将来的版本中。 相反,我们鼓励使用 Elemental2 库,该库与 GWT2 和 J2CL 兼容。
- 删除 NoSuchMethodException 模拟。
错误修复
- 修复了 float[] 和 double[] 的 Arrays.binarySearch 语义。
- 添加了对错误/异常中多行消息的支持。
- 在 DiskCache 中添加了关闭挂钩,用于清理临时文件。
- 缓存 Gecko 版本以降低 FireFox 上的 CPU 使用率。
- 不要假设 “this” 始终非空。
- 更新了 Firefox 版本 60.0.2 和 Chrome 66.0.3359.45 的全局变量。
- 修复了 String.regionMatches。
- 允许原生 JsMethods 与具有相同名称的实现共存。
- 确保在必要时对 lambda 进行装箱、拆箱和插入擦除强制转换。
- 在 Double/Float.compare() 中正确处理负零。
其他
- 将 CLDR 更新至版本 34。
- 数组现在实现了 Cloneable。
- 将支持错误链接在一起,并使用 cause 属性,开始跟踪基础错误对象中的 cause 和被抑制的错误。
- 将 AtomicReference 添加到 gwt/emul 中。
- 通过 ScriptInjector 传播脚本 nonce。
- 为 ExecutorService 和 ScheduledExecutorService 添加部分模拟。
- 模拟 java.util.concurrent.Flow。
- 模拟 javax.annotation{,.processing}.Generated。
- 确保如果未定义 “goog.global”,则为 $wnd。
- 添加
when-linker-added
元素定义。 - 添加 Reader 和 StringReader 模拟。
- 删除 GWT 版本检查。
- 对于合成方法,不要显示 “unusable-by-js” 警告。
- 更新不可修改列表,以在 Java8 方法上抛出异常。
- 默认情况下禁用 DataflowOptimizer,并在使用时发出警告。
有关更多详细信息,请参阅 提交日志.
2.8.2 版本说明
亮点
支持在 Java 9 中运行。 请注意,这并不意味着 GWT 能够编译 Java 9 源代码,或支持 Java 9 JRE 更改,而是可以使用 Java 9 JRE 编译 GWT 项目。 请注意,新的
--module-path
标志不受支持,但仍必须像以前一样使用-classpath
。Chrome 61 删除了用于读取绝对顶部/左侧值的函数。 内部实现已更新,以反映现代标准。
未捕获的异常处理程序现在将通过
window.onerror
处理页面上的所有错误。 如果页面上存在行为不端的脚本,这可能会导致潜在的重大更改。 要禁用此功能,请将属性gwt.uncaughtexceptionhandler.windowonerror
设置为IGNORE
。
<set-property name="gwt.uncaughtexceptionhandler.windowonerror" value="IGNORE"/>
有关更多详细信息,请参阅 com.google.gwt.core.Core
。
错误修复
- LookupMethodCreator 创建的方法太大。
- NativeRegExp 应使用 iframe 实例,修复 Edge JIT 错误。
- JsProperty getter/setter 有时会被报告为不兼容。
- 从 JSNI 实例化原生 JsTypes 会导致 InternalCompilerException。
- 从过滤后的流中删除 SUBSIZED 特性。
- 在使用原生 JsType 可变参数时,内部编译器异常出现在 JsMethod 中。
- String.toLowerCase 和 toUpperCase 在某些语言环境中的回归,特别是土耳其语。
- String.charAt 中缺少边界检查。
- 修复了在编译涉及可变参数的方法引用时发生的 AIOOBE。
- 应用 HtmlUnit 解决方法,确保正确调用 window.onerror。
其他
- 将 lang/jre 模拟 JSNI 迁移到 JsInterop,以便与 J2CL 共享。
- 在 gwt 构建中添加了 ErrorProne。
- 改进与 CSP 的兼容性。
- 添加了对 java.io.Externalizable 的模拟。
- 添加了对 java.lang.reflect.Array 的模拟。
- 如果 JSO 具有名为 equals/hashcode 的方法,则 JSO.equals/hashcode 将委托给 JS 对象。
- 删除了项目中过时或未使用的部分。
- 将 guava JRE 模拟迁移到 GWT。
- HtmlUnit 测试现在在批处理模式下运行。
2.8.1 版本说明
亮点
Elemental1 的 JSON 解析器现在在字符串、对象或数组未正确结束时会正确抛出异常。
支持使用白名单/黑名单和通配符过滤 JsInterop 类型以进行导出。
-generateJsInteropExports
标志仍用于启用该功能,但-includeJsInteropExports
和-excludeJsInteropExports
现在用于指定带有可选*
通配符的包。 后面的参数和模式将覆盖前面的参数和模式。支持 “
*
” (任何) 和 “?
” (未知) 类型作为 JsType 原生名称。 如果类型未知,则 “Unknown” 类型可以替代 Object,而 “any” 是任何 JS 类型的首选超类型,包括基本类型。
错误修复
- 修复 waitForBodyLoaded.js 中的加载错误。
- 修复了使用构造函数引用 (Type::new) 编译代码时的 NPE。
- 修复了默认方法的错误重写。
- 使原生 NativeRegExp 引用 iframe 实例。
- 修复了 Arrays.deepEquals 中对象数组的错误比较。
- 修复了 Jetty 参数处理中的 NullPointerException。
- 修复了覆盖中的 JsOptional 可能失败的错误。
- 在相关选项更改时清除持久性单元缓存。
- 救援跨越 JsInterop 边界的 JSO。
- 救援作为原生表示的类型,当超类型跨越 JS 边界时。
- 防止错误的浮点数表达式优化。
- 修复 Stream.anyMatch/allMatch/noneMatch 的实现,以支持包含空元素的流。
- 不要忽略流的返回值。
- 修复由于交叉类型作为擦除强制转换而导致的 ICE。
- 修复方法引用中的错误可变参数转换。
- 修复:在最后一个可排序的列标题中添加 role 属性。
- 正确保留原生方法覆盖中的名称。
- 使 Array.sort(float[]/double[]) 符合 JDK。
其他
- String.subString 中的小优化。
- 为字符串专门化 Objects.equals。
- 改进原始类型强制转换优化。
- 将全局黑名单更新至 chrome 57.0.2987.74。
- 对严格 CSP 的合规性改进。
- 在 Collectors 中删除 Characteristics 操作。
弃用
- 在 @GwtScriptOnly 中添加弃用。
2.8.0 版本说明
JsInterop
- 清理/更新 jsinterop 注释的 javadoc。
- 允许原生类使用覆盖实现原生接口。
2.8.0 (RC3) 版本说明
错误修复
- 修复 JsProperty 字段中的错误常量传播。
- 修复了缺少对默认方法和函数表达式桥接。
- 修复了 ArrayDeque 在扩展容量时的错误。
- 修复了缺少 JsOverlay 字段的声明/初始化。
- 修复了 SDM 中缺少错误报告,导致 NPE。
- 修复了由于 Boolean/Double/String 虚方法化而导致的超级开发模式中的 NullPointerException。
- 修复了在 InterfaceGenerator 中生成访问 GSS 常量的方法。
- 修复了对原生 JsType 子类的错误属性复制。
- 修复了原生 JsTypes 子类的 toString 分派。
其他
- 改进了 JsInterop 在原生类型字段上的错误消息。
- 更新了 Chrome 54.0.2840.16 的全局变量。
弃用
- 弃用危险的 RootPanel#clear(boolean)。
2.8.0 (RC2) 版本说明
错误修复
- 修复了错误的不可用-by-js 警告。
- 修复了 DevMode 服务器 (jetty) 重启时出现的问题。
- 修复了超级开发模式中,更改编译器选项不会触发完全重新编译的问题。
- 在 DevMode 入口点中添加了缺少的命令行参数。
- 修复了 String 中的性能回归。
2.8.0 (RC1) 版本说明
亮点
- 部分支持 Java 8 标准库 API(有关完整列表,请参阅以下内容)。
- 修复了 Java 8 编译时的内存泄漏。
- 源代码级别设置为 Java 8。
- 接口中的静态方法和默认方法对生成器不可见。 如果要利用这些 Java-8 特性,建议您切换到注释处理器。 如果将接口更改为将非默认方法变为默认方法,这可能会破坏现有构建。
弃用
- 经典开发模式已弃用。您可以通过传递 gwt.args='-devMode' 来暂时切换回开发模式以进行测试用例。
- 弃用 JSR 303 Bean Validation 支持(javax.validation,c.g.g.validation)。 该代码多年来一直没有维护。
重大更改
- GIN 现在需要一个解决方法:https://github.com/gwtproject/gwt/issues/9311
- JSNI 不允许对 Double、String、Boolean 及其超类型使用方法引用:https://github.com/gwtproject/gwt/issues/9356
编译器
- 将 JS 保留关键字更新至 ES6。
- 修复了基本类型和字符串的 instanceof。
- 使异常能够跨 Java/JavaScript 边界工作。
- 允许将原生数组强制转换为 Object[]。
- 使用修补的 JDT 来规避在为 Java 8 编译时发生的内存泄漏。
JsInterop
- 在 Java8 中使用默认方法实现
@JsOverlay
。 - 禁止在静态方法上使用非原生
@JsProperty
。 - 删除旧的 JsInterop。
- 添加
JsOptional
注释(禁止在基本类型参数上使用)。 - 允许在有效最终方法上使用
@JsOverlay
。 - 在部署到 Maven 时,将 JsInterop 注释拆分为它们自己的 JAR。
<dependency>
<groupId>com.google.jsinterop</groupId>
<artifactId>jsinterop-annotations</artifactId>
</dependency>
UIBinder
- 在 UIBinder 中添加对
JsType
类的支持。
JDK 模拟
- 模拟
java.io.UncheckedIOException
。 - 模拟
Optional<T>
及其 int、long、double 变体。 - 使用消息 Supplier 模拟
Objects.requireNonNull()
。 - 修复 Math.min/max(float/double) 模拟行为。
- 模拟
Character.isBmpCodePoint()
。 - 模拟
CharSequence.chars()
。 - 模拟
java.lang.SecurityException
。 - 模拟 Java 8 API
java.util.Arrays
,java.util.ArrayDeque
,java.math.BigInteger
,java.util.BitSet
,java.util.Comparator
,java.util.function
,java.util.Iterator
,java.lang.Iterable
,java.util.IntSummaryStatistics/LongSummaryStatistics/DoubleSummaryStatistics
java.util.Collection/Lists/Queues
,java.util.Map
,java.util.logging.Logger
,java.util.PrimitiveIterator
,java.util.Spliterator
,java.util.stream
,java.util.StringJoiner
GSS
- 在InterfaceGenerator中添加CSS3和GSS支持
其他
- 修复Maven示例以使其与GWT 2.8一起使用
- 修复了启动CodeServer时的拼写错误
- 更新Chrome 52.0.2743.24的全局变量
- 将apache commons-collections更新到3.2.2
elemental.json.JsonValue
现在可序列化。这使得能够将JsonValues存储在服务器上的HTTP会话中。
2.8.0(Beta1)版本说明
亮点
- 支持Java 8语法
- JsInterop已从实验性毕业。请参阅 最终的JsInterop规范。
- GSS不再被视为实验性,旧的CssResource现在已弃用。
弃用
- 旧的CssResource语法现在已弃用。有关GSS迁移的更多信息,请参阅 此文档
编译器更改
- 编译器现在支持Java 8语法。
- 新的优化器框架,该框架仅在自上次运行以来受更改影响的AST部分重新运行优化过程。这加快了大型应用程序的编译速度。
- 添加了更好的类型专用化,可以实现更好的优化。
- 许多错误修复
库更改
- GWT属性的通用访问器。现在可以使用
System.getProperty()
在编译时访问任何配置或绑定属性的值。 - 可配置检查
- 添加了-setProperty标志
JDK 模拟
- 当可用时,开始使用ES6 Maps来代替HashMap/HashSet,这使性能提高了3倍。
- 切换到新的长模拟,具有显着的性能改进(例如,较小数字的除法速度快了50倍)
- Double/Boolean不再装箱。
日志记录和堆栈跟踪
- 改进了超开发模式的日志记录和堆栈跟踪。
GSS支持
- GSS不再是实验性的,但默认情况下它没有启用,以便更容易、更顺利地迁移到GWT 2.8。
CssResource.enableGss
配置属性开启GSS支持。有关GSS迁移的更多信息,请参阅 此文档 - 添加了“for循环支持”
- 现在可以使用新的concat()函数来连接变量和字符串字面量。
- @gen-webkit-keyframes注释:自动生成@-webkit-keyframes块
开发模式
- 开发模式现在已弃用
超级开发模式
- SDM在磁盘上缓存MinimalRebuildCache对象,这加快了进程重启后的第一次SDM编译。
测试
有关更多详细信息,请参阅 问题跟踪器。
2.7.0版本说明
此版本修复了在测试RC1时发现的问题。
有关详细信息,请参阅 提交日志。
已知问题
DevMode始终在超级开发模式下启动,因此在生产模式下测试并不容易。请参阅 问题9004以了解解决方法。
2.7.0(RC1)版本说明
亮点
超级开发模式现在是默认模式。DevMode自动启动超级开发模式,重新加载网页会在需要时自动运行编译器。(
-nosuperDevMode
标志可用于恢复到旧的行为。)在超级开发模式下编译在第一次编译后会快得多。
对GSS(也称为 Closure Stylesheets)的实验性支持。(见下文。)
已知问题
- gwttar文件不正确。(在下一个版本中修复。)
弃用
GWT Designer无法与2.7一起使用,并且不再受支持。(源代码 可供那些希望恢复该项目的人使用。)
IFrameLinker和XSLinker已弃用,因为它们在超级开发模式下不起作用。但是,我们还没有找到适用于所有用例的合适替代品。有关更新和可能的解决方法,请参阅 问题8997。
编译器更改
在草稿模式和超级开发模式下,所有编译器优化都已关闭,以实现更好的调试。例如,空指针会更快地检测到。
JSNI引用不再需要完全限定的类名,因为这在Java中并非必要。(例如,导入可以正常工作。)
我们已经开始实现 JS Interop注释,这将使将GWT与JavaScript库一起使用变得更加容易。该规范尚未最终确定,并且存在错误,因此生产中的GWT应用程序和库目前应继续使用JSNI。如果您想尝试,可以使用
-XjsInteropMode
标志启用JS Interop,该标志可用于编译器和超级开发模式。(它不适用于旧的DevMode。)实验性的
-XmethodNameDisplayMode
标志为每个JavaScript函数添加了一个displayName
属性,其中包含Java方法的名称。这使得Java方法名在浏览器调试器中可用,但会以代码大小为代价。(在超级开发模式下也可用。)装箱的JavaScript字符串(使用
new String(...)
在JavaScript中创建)不再被认为等效于Java字符串。它们应该在传递给Java之前取消装箱。许多错误修复
库更改
JDK 模拟
String
、ArrayList
、HashMap
和Exception
的性能显着提高。新的模拟类:
Locale
、NavigableSet
和NavigableMap
。Class
、String
、Exception
、RuntimeException
、Logger
、Arrays
、Collections
和Map.Entry
中的新模拟方法。LinkedList
扩展了Deque
,并更好地处理不正确的用法。
日志记录和堆栈跟踪
更好地包装从JavaScript抛出的异常。
继承
com.google.gwt.logging.Logging
模块的GWT应用程序在使用java.util.logging
包记录消息时具有不同的默认行为。新的默认行为是将级别为SEVERE
及以上的日志消息记录到浏览器的控制台。PopupLogHandler
和SystemHandler
默认情况下不再启用。FirebugLogHandler
和NullLoggingPopup
已删除。()
实验性的GSS支持
CssResource.enableGss
配置属性开启GSS支持。
启用后,扩展名为“gss”的资源文件将被解析为 Closure Stylesheet。
启用后,可以通过在
ui:style
标记上设置gss="true"
,在UiBinder文件中使用GSS。如果设置了
CssResource.legacy
配置属性,则.css 资源和没有gss=true
的ui:style
标记将首先转换为GSS,然后以GSS解析。
UiBinder
ui:data
标记具有新的属性:mimeType
和doNotEmbed
。
GWT-RPC
rpc.XserializeFinalFields
配置属性开启对序列化最终字段的实验性支持。LinkedHashSet
可以在没有序列化策略的情况下序列化。deRPC 已删除。
RequestFactory
更好地支持重写方法和泛型。
修复了对
RequestContext
方法上的@SkipInterfaceValidation
的支持。
国际化
- 升级到CLDR 25。
浏览器API更改
更新了对类型化数组的支持。
添加了
History.replaceItem()
。修复了Chrome上的
Window.addWindowScrollHandler
的问题。
小部件
已删除弃用的
com.google.gwt.widgets
包。各种错误修复和次要改进。
开发工具更改
开发模式
-nosuperDevMode
标志可用于关闭超级开发模式并恢复到旧的开发模式。(但是,大多数当前浏览器不再支持开发模式插件。)-modulePathPrefix
标志可用于将开发模式的输出移动到战争目录的子目录。
超级开发模式
在第一次编译后,编译速度快得多。(如果没有任何文件更改,编译将完全跳过。)
第一次编译不再在启动时发生。
调试时Chrome更快地重新加载页面。(源映射文件大小减少了。)
-launcherDir
标志可用于避免在启动超级开发模式之前运行GWT编译器。启用后,超级开发模式会写入存根.nocache.js 文件,这些文件会在加载GWT应用程序之前自动重新编译应用程序。因此,不需要书签。 (此功能在通过开发模式启动时会自动启用。)-logLevel
标志可用于调整编译错误的报告方式。“开发模式开启”书签对话框显示页面上每个模块的超级开发模式是否开启。
使用
java.util.logging
以级别SEVERE
及以上记录的日志消息默认情况下会写入浏览器控制台。修复了由Windows上锁定目录引起的启动失败。
测试
改进了运行测试期间编译错误的错误报告。
使用
java.util.logging
以级别SEVERE
及以上记录的日志消息默认情况下会写入浏览器控制台和测试输出。-Dgwt.htmlunit.debug
可用于在使用HtmlUnit运行测试时打开JavaScript调试器窗口。已删除
RunStyleRemoteWeb
和BrowserManager
工具。已删除标志:
-standardsMode
、-nostandardsMode
、-quirksMode
。(GWTTestCase 测试始终在标准模式下的HTML页面中运行。)
有关更多详细信息,请参阅 问题跟踪器。
2.6.1版本说明
此版本包含针对 GWT 2.6.0 的错误修复。
亮点
- 修复了在开发模式下运行网络应用程序时的类加载器问题。
- 恢复了GWT Designer支持。
- 修复了在开发模式下返回原始值的JSNI调用。 问题8548
- 修复了Windows和Internet Explorer的超级开发模式(该页面必须具有HTML5文档类型)。
完整的更改列表可以找到 这里。
2.6.0版本说明
此版本包含次要更新,以消除不必要的调试警告。有关GWT 2.6.0版本中包含的功能和错误修复的完整列表,请参阅 2.6.0(RC1) 的版本说明。
2.6.0(RC4)版本说明
此版本默认启用了超级开发模式挂钩,更新了示例Maven POM,包括开发模式的Firefox内存泄漏修复,以及在发布候选版本测试期间发现的一些其他次要回归。
2.6.0(RC3)版本说明
此版本修复了与Google Plugin for Eclipse的兼容性问题,改进了未捕获异常处理,并恢复了自GWT 2.5.1以来进行的一些向后不兼容的更改。
2.6.0(RC2)版本说明
此版本禁用了Opera排列,添加了更易于维护的DOM事件分派机制,并修复了在发布候选版本测试期间发现的一些GWT-RPC和IE11问题。
2.6.0(RC1)版本说明
亮点
- 支持Java 7,现在是默认版本。(可以使用
-sourceLevel 6
覆盖此设置) - GWT开发模式将在2014年某个时候 不再适用于Chrome,因此我们改进了调试的替代方法。对超级开发模式、断言、控制台日志记录和错误消息进行了改进。
- Internet Explorer清理:此版本中默认情况下禁用了对IE6/7的支持,并且将在下一个主要版本中删除。IE10现在是单独的排列。
编译器更改
- 可以使用
@GwtIncompatible
注释标记GWT编译器应该忽略的类、方法和字段。(任何名称为该名称的注释都可以使用,无论包如何。)
标志清理
标志已清理,以确保一致性,但为了向后兼容,旧标志仍然受支持。
- 可以在命令行上多次指定参数,最后一个参数优先。
- 布尔标志可以使用“no”始终禁用。
- 实验性标志始终以“X”或“Xno”开头以禁用。
- 已删除弃用的
-out
标志 - 添加了用于打开和关闭特定优化的标志。
-saveSource
和-saveSourceOutput *dest*
选项可用于将 GWT 应用使用的源文件写入输出目录。(与includeSourceMapUrl
配置属性结合使用,可以设置在 Super Dev Mode 外进行源代码级别调试。)
生成的 JavaScript 的更改
- 捕获并重新抛出 JavaScript 异常不再将其包装在 Java 异常中(因此控制台将正确打印它等)
- 断言失败将在浏览器调试器中停止(如果已打开)
- 各种代码大小改进。
代码拆分
- 片段合并更加可靠,适用于 soyc 报告
- GWT.runAsync:允许传递相同的类,将代码放入相同的片段中
- GWT.runAsync 始终异步运行;以前它有时是同步的。(通过继承 SynchronousFragmentLoadCallback.gwt.xml 可以恢复此行为。)
compiler.splitpoint.leftovermerge.size
配置属性设置片段的最小大小- AsyncProxy 已弃用
- 各种错误修复
JavaScript 交互性
- JavaScriptObject:添加了 createArray(size)
- JsMixedArray:为 null 修复了 getString()
- JSNI:允许在 JSNI 方法引用中使用换行符(和其他空白字符)
- JSNI:当使用一元运算符 ‘+’ 将其转换为 double 时,不要丢弃它 问题 6373,3942
生成器 API
- PropertyOracle:已删除弃用的方法
- JRawType.getImplementedMethods:修复了继承方法的类型参数
错误修复
库
JDK 模拟
- java.lang.Class:添加了 getSimpleName()
- ArrayList.removeRange():已修复
- StringBuilder:添加了 appendCodePointInt()
- StringBuffer/Builder:添加了 reverse()
- 数字子类
- 整数解析接受初始 ‘+’(用于 Java 7 兼容性)
- 添加比较方法(用于 Java 7)
- 修复了 isFinite/isInfinite 问题 8073
- java.lang.reflect.Type:添加
- java.util.Objects:添加(Java 7)
- java.sql.Timestamp:修复了 equals() 中的 NullPointerException 问题 6992
核心库修复
- GWT.debugger() 发出 JavaScript
debugger
语句 - GWT.maybeReportUncaughtException() 将异常发送到未捕获异常处理程序(如果有)
- 关于:已清理
- ConsoleLogHandler:针对 IE 和 Firefox 修复 问题 6916,问题 8040
- iOS 上的堆栈跟踪已修复。
- Timer:针对 IE6-8 修复了 cancel() 问题 8101
浏览器排列更改
ie6
排列(也处理 IE 7)现在默认情况下被禁用。对 IE6 和 IE7 的支持将在下一个主要 GWT 版本中删除。添加了
ie10
排列。没有回退值,因此需要更新显式检查user.agent
的延迟绑定和条件 CSS。(但是,请注意,以前 IE 版本需要的解决方法可能不再需要。)UserAgent:用于访问
user.agent
的新类
浏览器API更改
以像素为单位返回大小的 Element 方法会自动将子像素值转换为 int(为了向后兼容)。
所有以前接受
com.google.gwt.user.client.Element
(已弃用很长时间)的 API 现在改为接受com.google.gwt.dom.client.Element
。接受 URL 的 DOM 方法现在也接受 SafeUri 对象。
Node:添加了 removeAllChildren()
- Element:添加了 toggleClassName()
- Element.hasTagName() 现在不区分大小写
- Element 子类:添加了 is() 方法,例如 DivElement.is(elem)
- user.client.DOM:弃用旧方法
- KeyCodes:更多键代码,添加了 isArrowKey()
- HandlerRegistrations:添加了 compose() 方法
- Canvas:添加了 drawImage() 重载,wrap() 方法
- Animation:添加了 isRunning()
可以使用 Widget.addBitlessDomHandler() 处理 GWT 不知道的 DOM 事件。这允许第三方库处理 GWT 本身不知道的事件(例如 MsPointerEvents)。 问题 8379
HTML 生成更改
- HtmlElementBuilder:支持
<col>
标签 - HtmlBuilderFactory:返回类型更具体
- 接受 URL 的构建器方法现在也接受 SafeUri
CSS 更改
- @url 现在支持 ImageResource
- user.agent 值已更改(请参阅浏览器排列更改)
UiBinder 更改
小部件更改
- CellView:焦点修复 问题 8359
- DataGrid 修复:样式名称、滚动条 问题 8309
- DatePicker:大量改进。
- DialogBox:修复自动隐藏内存泄漏
- FileUpload:修复了 wrap() 方法 问题 5055
- HtmlTable、FlexTable、Grid:修复了 IE9/IE10 中的内存泄漏 问题 6938
- ListBox.setMultipleSelect 未弃用
- MenuBar:焦点修复 问题 3884
- RootPanel:添加了 clear()
- SimpleCheckBox:实现 HasValue
- SimplePager:添加了构造函数以隐藏“第一页”按钮
- SingleSelectionModel:修复了 getSelectedSet
- SplitLayoutPanel:调整大小修复 问题 4755
- SuggestBox
- Tree/TreeItem:已删除弃用的方法
- ValueListBox:实现 Focusable
- ValuePicker:修复了 setValue() 以便不触发事件 问题 7330
无障碍
- UiObject.setVisible() 仅为隐藏对象添加 aria-hidden
国际化
- Document.{get,set}ScrollLeft():针对 Safari 和 IE9 修复了 RTL
- 更新了一些斯拉夫语的复数规则
- 修复了货币符号位于最后时的货币格式(符号添加了两次)
- 数字格式常量已升级到 CLDR 21
编辑器框架
- CompositeEditor 及其子类采用
Editor<? super C>
RequestFactory
- 添加了对 Map 的支持 问题 5524
- 添加了对枚举作为请求中类型参数的支持
- 添加了对 EntityProxyId 作为请求参数的支持
- 修复了服务器返回 null 时出现的 NullPointerException 问题 8104
服务器端类
- StackTraceDeobfuscator 已清理并移至 gwt.core.server
开发人员工具
开发者模式
- 在 Linux 上启动用户的首选浏览器
- 修复了 JSNI 代码中的原始类引用(例如 @int::class)
- 减少了内存泄漏
超级开发模式
安全:在 2.6 中,我们认为打开 Super Dev Mode 钩子并在生产环境中保持打开状态是安全的。作为额外的预防措施,我们建议设置 devModeUrlWhitelistRegexp 配置属性,以确保它只能从 localhost 和您自己域中开发人员的机器加载 JavaScript。
安全:在 https 页面上自动禁用 Super Dev Mode(另一个预防措施,而且由于混合内容限制,它不起作用。)
WebAppCreator 现在创建带有“superdevmode”目标并启用 Super Dev Mode 的 Ant 项目。
- 大多数示例应用程序都有一个“superdevmode”目标
- GWT.log() 可用并打印基本堆栈跟踪
- sourceUrl 注释已修复,因此在 JavaScript 调试器中,JavaScript 源代码显示为 ‘{module}-0.js’ 而不是仅 ‘0.js’。
- 在代码服务器上,将源代码列表中未使用的 Java 代码变灰。
- RemoteServiceServlet:gwt.codeserver.port 参数可用于从 Super Dev Mode 代码服务器的 /policies/ 目录下载序列化策略。这可以用来避免在处理 GWT-RPC 代码时进行一些服务器重新编译。
测试
- 已删除基准测试和配置文件支持
- GWTTestCase 在许多情况下报告更好的错误消息
- GWTTestCase:始终使用 UTF-8 HTML 页面
- GWTTestCase:已删除 supportsAsync、addCheckpoint、clearCheckpoint、getCheckpoints
- GWTTestCase 现在使用它自己的未捕获异常处理程序,以避免在测试调用 GWT.setUncaughtExceptionHandler 的代码时出现冲突。
升级的依赖项
- HtmlUnit 2.13
- Jetty 8.1
- Servlet 3.0
- Guava 15.0
- Protobuf 2.5.0
- ASM 4.1
- JDT 3.8.3
- Closure compiler 20131014
有关更多详细信息,请参阅 2.6.0-rc1 之前的变更列表 以及 问题跟踪器。
2.5.1 版本说明
此版本包含对示例应用程序的 Maven POM 文件的更新。有关 GWT 2.5.1 版本中包含的完整功能和错误修复列表,请参阅 2.5.1(RC1) 的版本说明。
2.5.1(RC1)版本说明
GWT 2.5.1 是一个维护版本,自 GWT 2.5 以来包含了许多错误修复和次要改进。
自 2.5.0 以来的更改
安全修复
- 修复了 GWTTestCase 使用的 html 文件中的 XSS 漏洞 (补丁)。这些文件仅在 GWT 应用程序依赖 JUnit 模块时才会包含在其中。尽管已修复,但仍不建议使用。
编译器和链接器
开发者模式
- 修复了与 OpenJDK 7 的兼容性。
- 已删除 GWTShell,这是启动开发者模式的过时方法。
- 添加了一个复选框以自动滚动日志。
此外,Chrome 插件现在位于 Chrome 商店中。
超级开发模式
- 添加了 -noprecompile 选项以加快启动速度。
- 添加了对 IE8 的支持(仅重新编译,不调试)。
- 通过使用 gzip 减少了下载大小。
- 修复了与 Chrome 24+ 中调试器的兼容性问题。
- 修复了与修改 Array 原型的第三方 JavaScript 的兼容性问题。
核心库和 JDK 模拟
- 更改了 Window.Location 以在调用 window.history.pushState 后返回新的参数值
- 添加了一个 ScriptInjector 选项,该选项在完成时会从页面中删除
<script>
标签。 - 添加了 RequestBuilder.withCredentials()。
- 修复了 RepeatingCommand 中的性能问题 (7307)
- 修复了 iOS 上的堆栈跟踪反混淆 (7902)
- 添加了“webApiUsage”属性。默认设置为“modern”。如果设置为“stable”,GWT 库将避免使用带前缀的 web API。目前,唯一的区别是动画将使用计时器。(7895)
- 修复了使用 Nan、Infinity 和前导零调用 Double.parseDouble() 时出现的问题 (7713、7834)
- 修复了使用 MIN_VALUE 调用 Long.parseLong 时出现的问题 (7308)
- 修复了 AbstractMap.remove 中的错误 (7856)
HTML、CSS、资源文件
- Element 的 addClassName 和 removeClassName 方法现在返回一个布尔值。
- 修复了 getBodyOffsetLeft 和 Top 的错误:[(补丁))(https://code.google.com/p/google-web-toolkit/source/detail?r=11432)
- 添加了对媒体类型的 CSS 支持 (4911)
- 为 CSS 添加了“debug”混淆样式 [(更改))(https://code.google.com/p/google-web-toolkit/source/detail?r=11442)
- 提高了调整大小的图像资源的质量 (7193)
小部件和编辑器
- 添加了 Tree.setScrollIntoViewEnabled (2467)
- 修复了 SplitLayoutPanel.setWidgetHidden 中的 bug (7715)
- 改进了 CellTable 中的点击处理 (7508)
- 编辑器框架 bug 修复:(5589, 6959)
国际化
RPC 和服务器端 Java
- 修复了在更改枚举类型后部署应用程序时,GWT-RPC 反序列化错误。 (7836)
- 修复了 GWT-RPC 生成器 bug,该 bug 可能导致生成过多的策略文件,从而导致服务器端内存使用量过大。 (7791)
- 修复了在服务器端 GWT-RPC 中反序列化复杂泛型类型时出现的无限循环。 (7779)
- RequestFactory bug 修复:(7900)
- 为 StackTraceDeobfuscator 添加了一个构造函数选项,用于节省服务器内存。
- 修复了在使用在服务器上使用 GWTBridge 的共享代码时发生的异常。 (7527)
2.5.0 版本说明
此版本包含在候选版本中发现的一些小 bug 修复。请参阅 GWT 2.5 中的新增功能 以及 2.5.0 (RC1) 和 2.5.0 (RC2) 的版本说明,以获取 GWT 2.5.0 版本中包含的所有功能和 bug 修复列表。
从 2.4 到 2.5 正式版的安全漏洞
GWT 团队最近发现,在 2.4 Beta 和候选版本中发现的安全漏洞在 2.4 GA 版本中只修复了一部分。在 2.5 GA 版本中添加了更完整的修复程序。如果您使用的是使用 GWT 2.4 或 2.5 RC 构建的应用程序,那么您需要获取最新的 2.5 版本,重新编译您的应用程序,并重新部署。
2.5.0 (RC2) 版本说明
这是 GWT 2.5 的候选版本 2。请参阅 GWT 2.5 中的新增功能 页面以及下面的版本说明,以获取此版本中包含的所有功能和 bug 修复列表。
自 RC1 后的更改
- GWT 工具现在可以在 JDK 7 上运行。(但是,GWT 代码中还没有任何 JDK 7 语言或库功能。)
- RC1 中引入的可访问性库已为发布进行了清理。
- 对 验证 的支持已改进,并记录在案,不再被视为实验性。
- 其他修复;请参阅 问题跟踪器 获取更多信息。
2.5.0 (RC1) 版本说明
这是 GWT 2.5 的候选版本 1。请参阅 GWT 2.5 中的新增功能 页面以及下面的版本说明,以获取此版本中包含的所有功能和 bug 修复列表。
主要增强功能
- 超级开发模式,开发模式的替代方案(实验性)
- Elemental 库(实验性):高效的 DOM 访问和 HTML5 API(实验性)
- 来自 Closure 的新的编译器优化
- 片段合并优化,用于减少大型应用程序中的延迟
- 开发模式性能和刷新时间加速
- 一个新的可访问性库,用于在 DOM 元素上设置 ARIA 角色、状态和属性
- 用于呈现单元格和访问内联样式的 UIBinder 增强功能
其他修复和增强功能
- 由于为 ClientBundle 和 RPC 生成器添加了生成器结果缓存,开发刷新时间的显著加速。添加了生成器编写者可以使用的结果缓存 API (r10412, r10476)。
- 通过为 RPC 提供仅开发模式实现,显着改善了开发模式下的 RPC 性能。
- 添加了源映射支持。请参阅 此文档 获取更多详细信息。
- 减少了编译器输出中 Java 类型开销 (r10435)。
- 添加了 CellTableBuilder API 以及用于 CellTable 中自定义标题和页脚的 API (r10435, r10581)。
- 添加了预反序列化类型检查,以减少因尝试使用类型不匹配调用 RPC 方法而导致的错误消息数量 (r10518)。
- DynaTableRF 和 Validation 示例现在使用 Maven 代替 ant。
- DateCell 现在接受 TimeZone 作为构造函数参数。
<ui:with>
现在支持嵌套的<ui:attribute>
元素,用于设置提供类型的属性值 (r10675)。- 改进了开发模式下 JavaScriptExceptions 报告,以包含方法名称和参数。
- 添加了模拟 Messages 和 CSSResources 的功能,以实现更好的单元测试 (r10723, r10768)。
- 在 GWT 用户库的部分中添加了 SafeHtml 支持。
- CssResource @defs 现在支持多个值 (r10667)。
- 添加了选项,用于编译出低于 SEVERE 和 WARN 的日志调用 (r10753)。
- CLDR 数据更新到 v2.1。
- 添加了简单和全局货币模式 (r10742)。
- 将 ISO-8601 时间格式更新为接受字面量“Z”的时区,表示 GMT+0 (r10773)。
- 对 null(无更改)重新编译的编译器输出稳定性进行了各种修复。添加了 -Dgwt.normalizeTimestamps 系统属性,以将输出 jar 文件中的日期归零,以稳定依赖于内容可寻址性的构建系统中的构建 (r10810)。
- 为 Float.intBitsToFloat、Float.floatToIntBits、Double.longBitsToDouble 和 Double.doubleToLongBits 添加了 GWT 模拟。
- 添加了对类型化数组的支持 (r10839)。
- 通过从映射中删除已修剪的符号,大大减少了符号映射的大小。
- 允许在 ui:style 的 src 属性中使用绝对路径。
- RequestFactory 的 JSON-RPC 模式中使用 Collections 作为参数的请求方法现在可以正确地对 Collections 进行编码。
重大变更和其他需要注意的变更
- 如果您以前从纯 Java 代码中链接到 gwt-user.jar,现在出现了 ClassNotFoundExceptions,您可能需要将 gwt-dev.jar 添加到您的类路径中。
- 已弃用的方法 AbsractCellTable.doSelection(Event,Object,int,int)、AbstractHasData.onUpdateSelection() 和 CellList.doSelection(Event, Object, int) 已被删除。
- IsRenderable API 的重大重构。请参阅 r10352 和 r10421 了解详细信息。
- SimplePager 中文本的 LEFT/RIGHT 布局已修复,这可能会为已经解决该问题的人员交换文本。请参阅 r10907。
- Tree[Item].addItem/insertItem(String html) 已被弃用,因为存在潜在的 XSS 问题。请改用 Tree[Item].addTextItem/insertTextItem(String text)。
- @GwtTransient 现在将适用于具有该简单名称的任何注释(例如,com.foo.GwtTransient)。这可以防止库编写者使他们的库依赖于 GWT 分发版。
- 作为 GWT 编译的一部分,会生成一个输出文件,该文件将完整的类名映射到 CSS 混淆的名称。这对于调试和测试很有用 (r10686)。
- 客户端 JUnit 类现在可以作为单独的模块使用,而无需引入 GWTTestCase (r10689)。
- 排列映射文件现在作为每次编译的一部分生成。
- UIBinder.useLazyWidgets 现在默认设置为 true。请参阅 r10730 了解详细信息。
以下依赖项已更新为以下版本
- Eclipse JDT 3.4.2_r894
- Guava 10.0.1
- HTMLUnit 2.9
- Apache HTTP Client 4.1.2(用于 HTMLUnit)
- Apache Commons Lang 2.6(用于 HTMLUnit)
- NekoHTML 1.9.15(用于 HTMLUnit)
- json-1.5.jar 现在作为 gwt-dev.jar 的一部分捆绑。streamhtmlparser (rebased) 已从 gwt-dev.jar 中删除,并已作为 gwt-user.jar 和 gwt-servlet.jar 的一部分捆绑。
- 编译报告的编译器指标方面已默认禁用。编译报告导致编译报告不稳定。要将编译器指标添加到编译报告中,请使用 -XcompilerMetrics 标志。
- 不再应使用 compiler.emulatedStack 属性。应改用 compiler.stackMode。
除了上面提到的内容外,请参阅 GWT 问题跟踪器中有关 2.5.0 的 bug 修复和增强功能的列表。
已知问题
- 单击 Showcase 示例的导航区域(但不在实际项目上)会导致导航区域变为空白。
- 将 samples/Expenses 导入 Eclipse 会失败,并显示“未指定主类型”对话框。
- SpeedTracer 和 GWT 之间的符号映射格式不匹配会导致 SpeedTracer 无法为 GWT 应用程序反混淆堆栈跟踪。
2.4.0 版本说明
这是 GWT 2.4 的正式版。请参阅下面的版本说明,以获取此版本中包含的所有功能和 bug 修复列表。
GWT 2.4 正式版包含用于 Android 的新 App Engine 工具、增量 RPC 工具、应用程序市场支持、更快的 UI 设计器(具有更好的 UiBinder 支持)、用于更快迭代开发的持久单元缓存、带固定标题的滚动 DataGrid、Beans.isDesignTime() 支持以及捆绑的安装程序,使安装和配置 GPE、GWT 和 GAE 更容易。
一般增强功能
- 用于 Android 的 App Engine 工具:构建可安装的 Android 应用程序,这些应用程序依赖于 App Engine 进行服务器端支持。
- 增量 RPC 工具:将服务器端方法添加到 App Engine 代码,GPE 将动态生成必要的序列化和 Android 代码。
- 应用程序市场支持:像部署到 App Engine 一样轻松地将应用程序部署到 Google 应用程序市场。
- UI 设计器:更快的启动和编辑时间、对 UiBinder 的分屏模式编辑支持、简化的 CSS 属性编辑、UiBinder 变形、IsWidget 支持等等。
- 持久单元缓存:GWT 编译器和开发模式现在会在运行之间缓存编译工件。这会导致迭代开发的启动时间更快。
- 滚动 DataGrid (#188): 新的 DataGrid 小部件支持带有固定标题(上方)和页脚(下方)的垂直滚动。
- 设计时支持 (#226): Beans.isDesignTime() 方法已添加到 GWT 模拟库中,以便在 UI 设计器中编辑 UI 时更好地隔离运行时代码。
值得注意的已修复问题
- RequestFactory 不支持多态 (#5367)
- 支持客户端上的 RequestFactory 服务继承 (#6234)
- 与 RequestFactoryEditorDriver 一起使用时,ListEditor 子编辑器的值不会刷新 (#6081)
- 纯 Java 中的 c.g.g.core.client.impl.WeakMapping 存在内存泄漏 (#6193)
- GWT 编译器删除了 clinits (#5707)
- 使 RequestFactory 类型令牌更紧凑 (#5394)
- 编辑器框架不支持 is/has 方法 (#6040)
请参阅 GWT 问题跟踪器中有关 2.4.0 的 bug 修复和增强功能的完整列表。
请参阅 GWT 问题跟踪器中重大变更的完整列表。
GWT 2.4 中的安全漏洞
最近,GWT 团队在 2.4 Beta 和候选版本中发现了一个跨站脚本漏洞(不在 v2.3 GA 或 v2.4 GA 中)。此漏洞在 2.4 GA 版本中已部分修复,并在 2.5 GA 版本中已完全修复。如果您使用的是使用 2.4 构建的应用程序,那么您需要获取最新的 2.5 版本,重新编译您的应用程序,并重新部署。
说明和已知问题
- 在 Eclipse Indigo 中,GPE 的 Maven 支持 需要安装 m2Eclipse WTP Integration 插件。可以通过 JBoss Update 网站安装。有关在最新 GWT 和 GPE 版本中使用 Maven 的规范参考,请参阅 Google Maven wiki 页面。
- GWT 的全新 RequestFactory 配置 对于纯 GWT、App Engine 或 GWT + App Engine 项目默认情况下未启用。它仅针对新的云连接 Android 项目默认启用。有关如何在 Eclipse、Maven 或命令行中使用新的 RequestFactoryInterfaceValidator 的信息,请参阅 RequestFactoryInterfaceValidation wiki 页面。
2.3.0 版本说明
这是 GWT 2.3 的正式发布版本。有关此版本中包含的完整功能和错误修复列表,请参阅下面的版本说明。
一般增强功能
- 添加了对 IE9 的支持。有关更多信息,请参阅 IE9 - 提示和技巧 文档。
- 2.3.0 (M1) - 通用增强功能
值得注意的已修复问题
已知问题
- 在编译时,您可能会看到类似以下内容的警告:“配置属性 UiBinder.useSafeHtmlTemplates 为 false!UiBinder SafeHtml 集成已关闭,这会让您的用户更容易受到跨站点脚本攻击”。此警告出现的原因是,尽管 UiBinder HTML 渲染已更新以支持 SafeHtml,但默认情况下它已关闭(设置为 false),这是由于一些小错误。如果您愿意,可以通过在 UiBinder.gwt.xml 中将“useSafeHtmlTemplates”属性设置为 true 来更改默认设置。您可以通过检查公开的错误 6145、6149 和 6198 来确定您是否受到已知错误的影响。
在 GWT 问题跟踪器中查看 2.3.0 的完整错误修复和增强列表。
2.3.0 (M1) 版本说明
这是 GWT 2.3 的第一个里程碑版本。
一般增强功能
为 Google Plugin for Eclipse 添加了以下功能
- Google API 集成
- 从 Google Project Hosting 导入项目
- 单点登录,用于访问 Project Hosting 和 App Engine
添加了对 HTML5 本地存储的支持的 GWT SDK
值得注意的已修复问题
- 更新了 GPE 的 UIBinder 编辑器,以提供基于拥有者类型中的 getter/setter 的属性自动完成功能
- 优化了 GPE 启动配置 UI,使其速度更快
- GPE 中的“检查更新”现在将检测对 GWT 和 GAE SDK 的更新
- 现在可以在 Eclipse 3.6 中正常启动针对包含端口号的外部 URL 的程序
- 更新了对 IE9 的支持 (#5125)
- 修复了 Internet Explorer 中的 iFrame 加载问题 (#1720)
在 GWT 问题跟踪器中查看 2.3.0 M1 的完整错误修复和增强列表。
2.2.0 版本说明
GWT 的 2.2 版本包含一个集成的 UI 设计器(作为 Google Plugin for Eclipse 的一部分),支持 HTML5 功能,例如 Canvas/Audio/Video 标签,一个更新的 CellTable 小部件,它现在支持可排序列和固定列宽,以及一个更宽松的 SafeHtml 模板解析器。
另请参阅 GWT 2.2 中的新功能。
一般增强功能
- Touchstart、touchmove、touchend、touchcancel 已集成到 GWT 事件框架中 (#5148)
- 为 Label、HTML、Anchor、Hyperlink 和 ListBox 等小部件内置了双向文本支持。有关此功能的更多信息,请参阅 此处。
一般更改
- GWT Designer v8.1.1 及更早版本不支持 GWT 2.2。要将 GWT Designer 与 GWT 2.2 一起使用,您需要卸载旧版本的 GWT Designer 并安装最新版本。
- 版本 2.2 已弃用对 Java 1.5 的支持,这会导致在构建应用程序时出现警告。虽然 Java 1.5 在接下来的至少一个 GWT 版本中仍将可以使用,但开发人员应升级其 Java 版本以更正这些警告并确保与未来版本的 GWT 兼容。
值得注意的已修复问题
在 GWT 问题跟踪器中查看 2.2.0 M1、RC1 和最终版本的完整错误修复和增强列表。
2.1.1 版本说明
一般增强功能
- 为 RequestFactory 添加服务层 (#5111)
值得注意的已修复问题
在 GWT 问题跟踪器中查看 此版本的完整错误修复和增强列表。
2.1.0 版本说明
此版本包含在候选版本中发现的一些小错误修复。有关 GWT 2.1.0 版本中包含的完整功能和错误修复列表,请参阅 GWT 2.1 中的新功能 以及 2.1.0 (RC1) 的版本说明。
2.1.0 (RC1) 版本说明
这是 GWT 2.1 的第一个候选版本。
已修复问题
- 如果实体 ID 为 String 类型,则创建将被破坏 (#1430)
- addon-gwt 在每个代理中都添加了一个布尔值 isChanged 方法,这些方法不起作用 (#1457)
- ValueListBox 显示了冗余条目 (#1287)
- 实施新的更新/创建/获取/删除事件 (#1238)
- 确保 DefaultValueStore 始终响应 (#1217)
- 允许使用 String 和 Long 键 (#951)
- mobile.user.agent 属性提供程序是否真正有效? (#1468)
- 在 DevMode 窗口中,UI 频繁操作会导致 NPE (#1282)
- 在 AbstractRecordListActivity 中恢复时出现 NPE (#1230)
- RequestFactoryServlet 在使用 Chrome 进行调试时始终抛出异常 (#1229)
- 为 GWT 实施 java.math.BigDecimal 支持
- 更新 Expenses 示例以通过 Maven 存储库拉取依赖项 (#991)
- 添加自定义费用报告作为示例 (#965)
- 查找 velocity 的替代品 (#956)
- servlet 中对名为“password”的字段进行硬编码拒绝发送 (#1262)
- 支架应用程序中没有未捕获的异常处理程序 (#1250)
- 从 GWT 附加组件中删除 web.xml 欢迎文件处理 (#1512)
- 为 ApplicationCommon.gwt.xml 使用公开可访问的 DTD (#1271)
已知问题
- RequestFactory 对于基本类型没有优雅地失败 (5357)
- 允许刷新 CellTable 标题/页脚 (5360)
- 需要记录哪些情况下会发生源代码更改事件 (5361)
- 启用 RequestFactoryPolymorphicTest 的测试 (5364)
- 将历史记录管理引入 Expenses 示例 (5366)
- Request Factory 不支持多态性 (5367)
- 服务器无法返回未持久化的对象 (5374)
- Javadoc 多态性规则 (5374)
- 从 PlaceChangeEvent 中停止 ActivityManager 可能会导致 NPE (5375)
- 为什么在 expenses.roo 脚本生成的 pom.xml 中,gwt-servlet.jar 是编译时依赖项? (5376)
- 为什么在 expenses.roo 脚本生成的 pom.xml 中,gwt-user.jar 的范围是“provided”? (5377)
- 无法解析服务器端域类 (5378)
- 确认日志从生成的支架应用程序中编译出来 (5379)
- 在 2.1 中添加的许多类在它们的 javadoc 中仍然有实验性 API 警告,需要将其删除 (5380)
- 使用 JDK 1.5 时,Showcase Cell List 在条目中显示 {2} (5385)
- 许多过时的实验性 API 的 javadoc 警告 (5380)
- 在 OperationRegistry 中未正确查找实例方法 (5425)
2.1.0 (M3) 版本说明
这是 2.1 的第三个里程碑版本。
已修复问题
- 为生成的 GWT 支架应用程序添加历史记录支持 (#883)
- M3 的日志记录实现 (#888)
- 实施其余的基本属性类型,包括 List 和 Long (#933)
- 添加枚举支持 (#935)
- 为 Record 对象引入 setter 方法 (#938)
- 指定用户身份验证、登录所需的最低工作量 (#955)
- gwt 项目无法在包含 m2eclipse 的 eclipse 中正确导入,存在错误 (#1122)
- RequestFactoryServlet 假设内容长度已知,但实际上可能并非如此 (#1150)
- 在支架应用程序中,从实体中选择“删除”会将您带到一个不包含任何数据的列表视图。 (#1164)
- 允许客户端代码调用实例方法 (#1185)
- 创建正在覆盖现有记录 (#1194)
- 更新生成的 pom.xml 以引用 2.1-SNAPSHOT jar 文件 (#1200)
- 清理 DeltaValueStoreJsonImpl 中的实现 hack… (#1209)
- AbstractRecordEditActivity 的硬编码退出点 (#1225)
- AbstractRecordListActivity 的硬编码退出点 (#1226)
- 无法再从 AbstractRecordEditActivity 创建子资源 (#1227)
- 更新 addon-gwt 以引用 GWT 的 M3 仓库 (#1236)
- GWT 附加组件包含指向 MVC 脚手架视图工件的链接 (#1249)
- RootPanel.get(id) 无法设置 'position:relative' 和 'overflow:hidden' (#1813)
- 在 onModuleLoad() 中发生的异常没有触发 UncaughtExceptionHandler (#1617)
2.1.0 (M2) 版本发布说明
这是 2.1 的第二个里程碑版本。
2.1.0 (M1) 版本发布说明
这是一个 2.1 的预览版本,它包含一组新的单元格小部件和一个应用程序框架,使构建大型企业应用程序变得更加容易。
已知问题
- 对于基于 App Engine 的应用程序,您需要从命令行运行一次 Maven,然后才能将应用程序导入 STS。 这可以像运行“mvn validate”或“mvn compile”一样简单,目的是用解压缩的 GAE SDK 准备您的本地仓库。
- 编译一个新应用程序和/或在开发模式下运行它,将会生成有关缺少依赖项的错误消息。 可以忽略这些错误,因为它们与您的应用程序可能不使用的类有关,并且在编译期间或在开发模式下运行时会被省略。
已修复问题
- 当图像在缓存中时,Image.onload 事件在 Internet Explorer 上不会触发 (#863)
- Image 应该提供设置备用文本的方法 (#1333)
- 为 CheckBox 设置 setWordWrap() (#1483)
- RichTextArea - setEnabled 不起作用 (#1488)
- ImageSrc6 抛出本机 NPE 异常 (#1700)
- 在可序列化字段内返回的数组在 Web 模式下导致 ClassCastException (#1822)
- BigDecimal 支持 (#1857)
- 当 MenuBar 失去焦点时,MenuItem 仍然处于选中状态 (#2458)
- KeyPressEvent 包含不正确的 UTF 代码 (#3753)
- 使 RemoteServiceRelativePath 注释 RetentionPolicy.RUNTIME (#3803)
- TextBox 在 IE 中触发 JSException ((#4027)
- 格式化数字结果错误 ((#4173)
- ui.xml 文件中的文件:行引用 (#4194)
- SplitLayoutPanel 中删除的方法已损坏 (#4217)
- 重构 SessionHandler 和 BrowserChannelClient 以允许除了 HtmlUnit 之外的其他 OOPHM 客户端 (#4287)
- 从另一个 FinallyCommand 中调度的 FinallyCommand 有时会卡住 (#4293)
- 在 NumberFormat 中格式化大数字后结果错误 (#4473)
- Dictionary.keySet() 在 DevMode 中包含 "__gwt_ObjectId" (#4486)
- JsStackEmulator 可能会破坏 JsInvocation (#4512)
- DOMImpl.g/setInnerText() 使用不必要昂贵的节点操作 (#4586)
- NumberFormat 错误格式化超过 6 位小数 (#4598)
- 如果使用非默认格式,DateBox 会生成未捕获的异常 (#4633)
- PopupPanel.removeFromParent() 不会删除玻璃面板 (#4720)
- 在开发模式 servlet 验证期间,来自 web.xml 的 ClassNotFoundException 用于配置的侦听器 (#4760)
- 将 ImageBundle 转换为 ResourceBundle 会导致回归,如果捆绑包也用于服务器端 (#4797)
- 添加 java.util.logging 模拟 ([#4954](# https://code.google.com/p/google-web-toolkit/issues/detail?id=4954))
2.0.4 版本发布说明
此 2.0.4 版本包含未包含在 2.0.3 版本中的修复程序。
值得注意的已修复问题
- 当我们在菜单栏菜单项上悬停时,整个 UI 在 IE 7 中消失 (#4532)
- List.subList 与 java.util.List 接口不完全兼容 (#4993)
- Safari 5 无法正确执行非整数字符右移 (#5056)
2.0.3 版本发布说明
此 2.0.3 版本包含未包含在 2.0.2 版本中的修复程序。
值得注意的已修复问题
- 在没有历史记录 IFrame 的情况下,在 Internet Explorer 中使用 PopupPanel 会抛出 NullPointerException (#4584)
- Opera 对历史记录的支持不起作用 (#3956)
2.0.2 版本发布说明
此 2.0.2 版本包含未包含在 2.0.1 版本中的修复程序。
值得注意的已修复问题
- Standard.css 缺少新的布局样式 (#4429)
2.0.1 版本发布说明
此 2.0.1 版本包含针对 2.0.0 版本中发现的错误的修复程序。
潜在的破坏性更改和修复
- 修复了代码生成器从生成的源代码中收集方法参数的方式中的一个错误,这影响了为 UiBinder 模板文件生成的 Messages 接口。 在 GWT 2.0 中,此类参数名称被错误地更改为 ARGn。 大多数 GWT 应用程序将不受影响,但依赖于这些名称的外部系统将需要更新。
- 开发模式服务器默认情况下只会绑定到 localhost,这将破坏跨机器调试。 您可以通过指定
-bindAddress 0.0.0.0
来获得旧的行为。 请参阅问题 (#4322) 以获取更多详细信息。 对于 webAppCreator 生成的 ant 文件,您可以使用ant -Dgwt.args="-bindAddress 0.0.0.0" devmode
传递它。 - CurrencyList/CurrencyData API 现在是公开的 - 如果您在非公开位置依赖于这些类,您只需要更新您的导入。
值得注意的已修复问题
- 具有 resource 属性的 UiBinder Image 类会删除该图像上的样式 (#4415)
- 如果小部件放在 FocusPanel 上,小部件会失去焦点(Opera、Safari) (#1471)
- SplitLayoutPanel 中删除的方法已损坏 (#4217)
- Splitter 构造函数将分隔符的背景颜色硬编码为白色 (#4335)
- Image 应该提供设置备用文本的方法 (#4335)
- CssResource 无法解析类选择器中未转义的 ' - '、' _ ' 以及未知的 at 规则 (#3946)
- Focusable 实现破坏了 Safari 中的 ScrollPanels (#1313)
- RequestBuilder 限于 GET 和 POST (#3388)
- HTMLTable.Cell.getElement() 使用行和列交换调用 getCellFormatter().getElement() RequestBuilder 限于 GET 和 POST (#3757)
- MenuBar 在悬停时会窃取焦点 (#3884)
- TabLayoutPanel 选项卡在 IE 上没有正确对齐 (#4447)
- webAppCreator 生成支持 gwt.args 属性的 ant 构建文件,用于向 gwtc 和 devmode 规则传递其他标志,例如
ant -Dgwt.args="-style PRETTY" gwtc
。
请参阅 GWT 问题跟踪器以 查看此版本中错误修复和增强的完整列表。
2.0.0 版本发布说明
此版本包含在发布候选版本中发现的一些小错误修复。 请参阅 GWT 2.0 中的新增功能 以及 2.0.0 (RC1) 和 2.0.0-rc2 的版本发布说明,以获取 GWT 2.0.0 版本中包含的功能和错误修复的完整列表。
2.0.0 (RC2) 版本发布说明
新功能
- GWT 2.0 引入了一些新的面板,它们共同构成了快速、可预测的应用程序级布局的稳定基础。 官方文档仍在开发中,但有关概述,请参阅 wiki 上的 布局设计。 新的面板集包括 RootLayoutPanel、LayoutPanel、DockLayoutPanel、SplitLayoutPanel、StackLayoutPanel 和 TabLayoutPanel。
- UiBinder 现在直接支持
LayoutPanel
。 例如
<g:LayoutPanel>
<g:layer left='1em' width='20px'><g:Label>left-width</g:Label></g:Layer>
<g:layer right='1em' width='20px'><g:Label>right-width</g:Label></g:Layer>
<g:layer><g:Label>nada</g:Label></g:Layer>
</g:LayoutPanel>
- Window.Navigator 现在提供对本机浏览器的 navigator 对象的访问权限。
重大更改和已知问题/错误/问题
以前安装过 IE 的 GWT 开发人员插件 的 Windows 用户必须卸载旧版本。 请使用以下步骤
- 从 Windows“开始”菜单中,打开“控制面板”
- 选择“添加或删除程序”
- 选择“IE 的 GWT 开发人员插件”,然后单击“卸载”
- 运行 Internet Explorer 并浏览到 http://gwtproject.org/missing-plugin/ 以安装新版本的插件
- 以前使用
-Dgwt.args="-web"
运行编译后的脚本的GWTTestCase
。-web
参数现在已弃用,取而代之的是-prod
,与从 Web 模式 到 生产模式 的术语更改一致。 DevMode
和GWTTestCase
的命令行参数-portHosted
已更改为-codeServerPort
,以与新术语 代码服务器 一致。- 命令行实用程序
junitCreator
已被删除。 相反,webAppCreator
实用程序采用新的参数:-junit _<path-to-junit-jar>_
,它合并了以前在 junitCreator 中的功能,并生成ant test
目标。 - 在 Chrome 上运行开发模式时,任何传递到 Java 代码的 JavaScript 对象都会被分配一个新属性
__gwt_ObjectId
。 这可能会破坏查找迭代此类对象属性的本机代码。 要解决此问题,请参阅此 示例,了解我们对JSONObject
的更改(滚动到底部)。 - 编译报告(以前称为 SOYC 报告)现在使用
-compileReport
命令行标志生成到Compiler
。 生成的报告现在写入私有 extra 目录。 如果未指定-extra
参数,则此目录默认为extras/
。 这消除了意外地将编译报告部署到公开可访问位置的可能性很小的安全风险。
已修复问题
- 在 UiBinder
<ui:style>
块中,css 类名可以包含破折号。 - 内联
<ui:style>
类名中的非 Java 方法安全字符不起作用 (#4052) - @external 对于
<ui:style>
中的内联样式不起作用 (#4053) - 已修复有关无效 JSNI 引用的各种错误警报。
- 各种 Swing UI 改进。
- RPC 调用导致 IE 出现内存泄漏 (#4133)
- deRPC 在 ProdMode 中引发错误 500,而不是传播正确的 RuntimeException (#4237)
2.0.0 (RC1) 版本发布说明
此版本包含重大更改,以提高开发人员效率,使跨浏览器开发更加容易,并生成更快的 Web 应用程序。
GWT 2.0 中正在发生的一些可能会导致
在没有解释的情况下令人困惑的更改
- 术语变更:我们将开始使用“开发模式”一词,而不是旧的“托管模式”一词。术语“托管模式”有时会让人困惑,因此我们将从现在开始使用更具描述性的术语“开发模式”。出于类似原因,我们将使用“生产模式”一词,而不是“Web 模式”一词来指代已编译的脚本。
- 发行版变更:请注意,只有一个下载文件,而且它不再特定于平台。您为每个开发平台下载同一个 zip 文件。这得益于用于实现开发模式的新插件方法(见下文)。发行版文件不包含浏览器插件本身;这些插件将在您首次在没有安装插件的浏览器中使用开发模式时单独下载。
主要新功能
- 浏览器内开发模式:在 2.0 之前,GWT 托管模式提供了一个特殊用途的“托管浏览器”来调试您的 GWT 代码。在 2.0 中,被调试的网页将在一个普通的浏览器中查看。开发模式通过使用名为GWT 开发者插件的本机代码插件来支持许多流行的浏览器。换句话说,您可以直接从 Safari、Firefox、Internet Explorer 和 Chrome 中使用开发模式。
- 代码拆分:使用GWT.runAsync() 的开发者引导的代码拆分,允许您将 GWT 代码分成多个片段以加快启动速度。想象一下,必须下载整部电影才能观看。好吧,这就是您今天必须对大多数 Ajax 应用程序做的事情——在使用之前下载整个应用程序。使用代码拆分,您可以安排只加载启动应用程序并让用户进行交互所需的最小脚本,而应用程序的其余部分则按需下载。
- 声明式用户界面:GWT 的 UiBinder 现在允许您以声明式方式创建用户界面。以前,必须以编程方式创建和小部件,需要大量的代码。现在,您可以使用 XML 来声明您的 UI,从而使代码更具可读性、更易于维护和更快的开发速度。Mail 示例已更新以显示使用 UiBinder 的实际示例。
- 通过 ClientBundle 捆绑资源。GWT 在 1.4 中引入了 ImageBundle,以提供图像的自动精灵化。ClientBundle 将此技术泛化,将将资源合并和优化为一次下载的功能扩展到文本文件、CSS 和 XML 等内容。这意味着更少的网络往返次数,这反过来可以减少应用程序延迟,尤其是在移动应用程序上。
- 使用 HtmlUnit 运行基于 GWTTestCase 的测试用例:在 2.0 之前,
GWTTestCase
依赖于 SWT 和实际浏览器的本机代码版本来运行单元测试。因此,运行单元测试需要启动一个实际的浏览器。从 2.0 开始,GWTTestCase
不再使用 SWT 或本机代码。相反,它使用HtmlUnit 作为内置浏览器。由于 HtmlUnit 完全用 Java 语言编写,因此典型的测试驱动开发不再涉及任何本机代码。可以在开发模式下完全在 Java 调试器中调试 GWT 测试。
重大更改和已知问题/错误/问题
- 在 2.0 之前,GWT 工具(如编译器)以平台特定的 jar(即具有像
gwt-dev-windows.jar
这样的名称)提供。从 2.0 开始,GWT 工具不再特定于平台,它们位于通用命名的gwt-dev.jar
中。您很可能需要更新构建脚本以删除平台特定的后缀,但这只是全部内容。 - 开发模式入口点自 GWT 1.0 以来已更改了几次。它最初被称为
GWTShell
,在 GWT 1.6 中引入了名为HostedMode
的替换入口点。从 GWT 2.0 开始,为了反映新的“开发模式”术语,开发模式的新入口点为com.google.gwt.dev.DevMode
。很抱歉不断更改它,但好消息是以前的入口点仍然有效。但是,为了真正保持最新,我们建议您切换到新的DevMode
入口点。 - 同样由于“开发模式”术语的更改,
webAppCreator
生成的 ant 构建目标的名称已从hosted
更改为devmode
。换句话说,要从命令行启动开发模式,请键入ant devmode
。 - HtmlUnit 不尝试模拟真实的浏览器布局。因此,对浏览器布局敏感的测试很可能会失败。但是,由于
GWTTestCase
支持其他运行测试的方法(如 Selenium),这些方法确实支持准确的布局测试,因此将布局敏感测试与非布局敏感测试放在同一个测试用例中仍然有意义。如果您希望 HtmlUnit 忽略此类测试,只需使用@DoNotRunWith({Platform.Htmlunit})
注解测试方法。 - 早于 1.2 版本的 Google Plugin for Eclipse 仅允许您添加包含名为
gwt-dev-windows.jar
的文件的 GWT 版本目录。您可以通过符号链接或将 gwt-dev.jar 复制到适当的名称来欺骗它。 - 传递给 GWT 测试基础设施的参数的方式已重新设计。现在有一个一致的语法来支持任意“运行样式”,包括用户编写的,而无需更改 GWT 本身。例如,
-selenium FF3
已变为-runStyle selenium:FF3
。此更改可能不会影响典型的测试调用脚本,但如果您确实使用-Dgwt.args
将参数传递给GWTTestCase
,请注意您可能需要进行一些更改。
1.7.1 版本说明
此版本通过允许托管模式在 32 位模式下使用 1.6 JRE 运行(使用 -d32 标志)来添加对 Mac OS X 版本 10.6(Snow Leopard)的支持。
已修复问题
1.7.0 版本说明
此版本显式添加了对 Internet Explorer 8、Firefox 3.5 和 Safari 4 的支持,以及一些高优先级的错误修复。在所有其他方面,它与 GWT 1.6 非常相似。但是,请注意,此版本为 1.7.0 版本而不是 1.6.5 版本,以表示对使用延迟绑定根据用户代理专门化代码的库的潜在重大更改(有关技术细节,请参阅下一节)。
另请参阅 1.7 中的新功能。
潜在的破坏性更改和修复
- 此版本包括对 IE8 的显式支持,IE8 与 IE 的先前版本相比有一些重大的行为变化。这些变化非常大,以至于为
user.agent
延迟绑定客户端属性添加了新的值ie8
。如果您有对user.agent
敏感的延迟绑定规则(即<replace-with>
或<generate-with>
)或属性提供者,您可能需要更新它们以考虑ie8
值。有关更多信息,请参阅 技术说明。
已修复问题
- 更新了 GWT 库以支持 IE8 (#3558,#3329)
- Node.is() 中的本机异常 (#3644)
- 从 CheckBox 触发两个点击事件的错误以及相关问题 (#3508,#3679)
- 如果您不使用 -Xss 设置堆栈大小,则编译器会发生 java.lang.StackOverflowError (#3510)
- FF3 中的鼠标滚轮 (#2902)
- GWT 输出的表达式对于 WebKit 太长 (#3455)
- java.sql.Date.valueOf 错误 (#3731)
- 添加了针对 Firefox 3.5 回归的解决方法 (bugzilla #497780)
1.6.4 版本说明
已修复问题
- junitCreator 创建的脚本中的类路径已更新为引用
/war/WEB-INF/classes
而不是/bin
。
1.6.3 版本说明 (RC2)
已修复问题
- 已解决 1.6.2 中引入的各种 servlet 类路径问题。
- JSP 编译应该在托管模式下开箱即用。
1.6.2 版本说明 (RC)
请参阅 GWT 1.6 中的新功能(在线)。
1.5.3 版本说明
已修复问题
- RPC 请求不再在嵌入式 Android 浏览器上失败
- 叶
TreeItems
现在与其非叶兄弟节点对齐 - 从
TreeItem
中删除最后一个子节点不再在左侧创建额外的边距 HTTPRequest
由于 XHR 选择错误,不再在某些 IE 安装上使用 POST 而不是 GET- 编译器现在使用更可靠的检查来防止具有局部变量的方法被内联
getAbsoluteTop()/Left()
不再能返回非整数的值Time.valueOf()
不再无法解析"08:00:00"
或错误地接受"0xC:0xB:0xA"
。
请参阅 GWT 问题跟踪器以获取 此版本中所有错误修复和增强的完整列表。
1.5.2 版本说明
潜在的破坏性更改和修复
History.onHistoryChanged()
已被添加回来(它在 1.5 RC2 中丢失了),但现在已弃用。应通过调用新的History.fireCurrentHistoryState()
来处理应用程序启动。- 标记为
final
的可序列化类型中的字段现在将生成警告;它们未被序列化的事实是一个令人困惑的来源。将这些字段标记为final
和transient
以避免警告。 - 无法从 JSNI 访问覆盖类型上的实例方法。(这以前在托管模式下有效,但在 Web 模式下运行时失败。)
- 托管模式服务器不再从模块的公共路径提供
hosted.html
;而是直接从类路径读取该文件。此文件与托管模式实现紧密耦合,并不意味着可由用户覆盖。
一般增强功能
Collections.unmodifiableSortedSet()
和Collections.unmodifiableSortedMap()
现在已实现。- 新的
Accessibility
类使小部件作者能够为其小部件添加 ARIA 支持。许多 GWT 小部件默认情况下具有 ARIA 支持。 - 当存在 JSNI 堆栈帧时,改进了托管模式中的异常堆栈跟踪。
已修复问题
- 修复了
Element.getAbsoluteLeft/Top()
和Event.getClientX/Y()
返回的坐标之间的关系。Document.getBodyOffsetLeft/Top()
可用于解释这两个坐标系之间的差异。 - Ctrl-Z 应该在 IE 中的 RichTextArea 上正确执行撤消操作。
请参阅 GWT 问题跟踪器以获取 此版本中所有错误修复和增强的完整列表。
1.5.1 版本说明 (RC2)
对标准模式的支持
GWT 1.5 为标准模式应用程序添加了更多支持,但某些小部件(尤其是那些使用基于表格的布局的小部件)可能无法按预期运行。低级标准模式错误(例如与 getAbsoluteLeft/Top()
相关的错误)已得到解决,但我们的小部件依赖的一些结构在标准模式下不起作用。例如,如果父元素是表格单元格,则无法设置小部件相对于其父元素的高度和宽度,并且 StackPanel
在 Internet Explorer 中占用比应有的更多的垂直空间。我们所有的示例都已恢复为怪癖模式,applicationCreator
在创建新的 GWT 应用程序时默认使用怪癖模式。
您仍然可以使用标准模式来运行您的 GWT 应用程序,但请注意,您可能会遇到一些布局问题。如果您正在将应用程序从怪异模式切换到标准模式,则您的 CSS 样式可能会以不同的方式应用,这也会影响您的应用程序。我们将继续在未来的 GWT 版本中解决标准模式支持问题。
潜在的破坏性更改和修复
DOM.eventGetClientX/Y()
现在会考虑主体元素的边距和边框- 在托管模式下,所有
DOM.eventGetXXX()
方法现在都会断言请求的属性在所有支持的浏览器中都是可靠的。这意味着尝试获取不支持该属性的事件的属性现在将抛出断言错误,而不是返回强制转换的值。最值得注意的是,如果尝试获取被单击的鼠标按钮,则单击事件会抛出断言错误。 DOM.eventGetXXX()
方法的返回值现在在 Web 模式下被强制转换为 0,而不是 -1。在托管模式下,如果属性未为给定事件定义,则会抛出断言错误,如前面的要点所述。- Opera 特定代码已升级以支持 Opera 9.5,但可能无法与旧版本的 Opera 一起使用,因为我们只支持最新版本。具体来说,某些小部件可能无法获得焦点。
- 对
History.newItem()
的调用现在会同步触发onHistoryChanged()
事件,而不是异步触发
一般增强功能
- 添加了对
contextmenu
事件的支持,该事件允许用户检测并覆盖浏览器的默认上下文菜单 - 提高了
NumberFormat
的性能 - 添加了对在
NumberFormat
中更改货币小数位数的支持 - 提高了动画的性能
- 改进了默认 GWT 样式主题的外观
- 改进了展示案例示例,使其拥有更强大的示例和更多语言翻译
FormPanel
现在可以包装现有表单,并将其提交到隐藏的 iframe
已修复问题
DOM.getAbsoluteLeft/Top()
和DOM.eventGetClientX/Y()
不再在 Firefox 3 中将异常记录到控制台- 修复了 Internet Explorer 中的内存泄漏
DOM.getAbsoluteLeft/Top()
现在在 Safari 3 中会考虑目标元素的边距和边框- 修复了与历史记录支持相关的某些错误
有关此版本的完整错误修复和增强列表,请参见 GWT 问题跟踪器 此处。
1.5.0 (RC) 版本说明
这个候选版本一言以蔽之,就是巨大。为了避免在这里列出所有细节,请参见 GWT 1.5 中的新增功能 以获取完整信息。您最想知道的是 GWT 1.5 支持 Java 5 语言特性(泛型、枚举类型、注释等)。但是请查看完整的说明,因为其中有很多很棒的东西!
1.4.60 版本说明
此版本与 1.4.59 相比只有几个细微的更改。
- 修复了基准测试中的一个错误,该错误阻止源代码显示在报告中。
- 修复了托管模式 Servlet 上下文模拟中的一个错误,该错误会导致 getResource() 无法在模块的公共路径中找到文件。
- 形式为
_module_.cache.html
的编译器输出文件过去包含旨在作为开发人员有用提示的 html。此消息现在已被删除,因为屏幕阅读器和一些浏览器会将此内容显示给最终用户。
1.4.59 (RC2) 版本说明
此版本包含大量错误修复和一些重要更改。如果您正在从 GWT 1.3.3 升级,强烈建议您先阅读 1.4.10 版本说明。
新功能
- DOM.eventGetCurrentEvent() 现在提供对当前事件对象的全局访问。(#1309)
- PopupPanel.setPopupPositionAndShow(PopupCallback callback) 现在提供了一种更简单、更可靠的方法来控制弹出窗口的布局。(#1120, #1243)
- 可以使用 SuggestionHandler 接口来响应用户在 SuggestBox 中选择建议。(#1086)
- [Collection.toArray(Object[])](doc/html/java.util.Collection) 现在已实现。(#695)
- 如果您已安装,则 Google Gears 现在可以在托管模式下访问(仅限 Windows)。(#1252)
一般更改
- 启动现在更快、更可靠。特别是,onModuleLoad() 现在在 DOM 准备好后立即调用,这通常在页面 body.onload() 事件触发之前。这使得您的应用程序可以在某些资源(例如图像)完全加载之前启动。
- Linux 托管模式应减少崩溃。(#1105, #1281, #1358)
- 在 ImageBundle 文档中添加了关于 HTTP 标头、缓存和 HTTPS 的重要讨论。(#1172)
- PopupPanel.center() 现在会使弹出窗口显示并居中。(#1120)
- RichTextArea 经历了大量错误修复,现在应该稳定了。(#1130, #1214, #1276)
新的 RPC 警告
- 如果在 RemoteService 方法的 throws 子句中使用非检查异常,则发出警告。
- 如果未找到在 RemoteService 接口中声明的给定类型的任何具体、可序列化子类,则发出警告。
- RPC 现在在编译期间生成一个序列化策略文件。序列化策略文件包含允许序列化的类型的白名单。它的名称是一个强哈希名称,后跟
.gwt.rpc
。此文件必须部署到您的 Web 服务器作为公共资源,可以通过 RemoteServiceServlet 通过ServletContext.getResource()
访问。如果未正确部署,RPC 将以 1.3.3 兼容模式运行,并拒绝序列化实现 Serializable 的类型。(#1297) - Panel.adopt(Widget, Element) 和 Panel.disown(Widget) 已被弃用。如果您已子类化 Panel,请仔细查看 Panel.add(Widget) 和 Panel.remove(Widget) 的新文档,了解将 Widget 添加到 Panel 和从 Panel 中删除 Widget 的正确方法。(#1121)
- 基准测试查看器应用程序现在更快、更漂亮,而且更人性化。
1.4.10 中的撤回
- 对 UIObject.setStyleName() 语义的重大更改已撤回。所有相对于 1.3.3 的更改现在都应向后兼容。(#1079)
- 1.4.10 的 Linux 发行版捆绑了 Mozilla 1.7.13,而不是以前的版本中捆绑的版本 1.7.12。此更改在某些系统上会导致问题,因此已恢复为 Mozilla 1.7.12。(#1105)
- 在 1.4.10 中添加了许多 RPC 警告。如果发现包含本机方法的类是可序列化的,则会发出其中一个警告。此警告现在仅适用于自动序列化的类型;具有自定义序列化程序的类型将不再触发此警告。(#1161)
- 1.4.10 中对 RPC 的更改会导致如果可序列化类型有任何不可序列化的子类型,则会发出错误。此更改导致在 1.3.3 中有效的代码在 1.4.10 中失败。在此版本中,该错误已降级为警告。(#1163)
- 对 1.4.10 中事件冒泡的潜在重大更改已撤回,以支持 1.3.3 行为。(#1159)
已修复问题
有关此版本的完整错误修复列表,请参见 GWT 问题跟踪器 此处。
1.4.10 (RC) 版本说明
这是 GWT 1.4 的候选版本,这是第一个由 GWT 开源贡献者主要参与开发的 GWT 版本。它已经很长时间了,但我们希望它值得等待。除了大量的新功能、优化和性能增强之外,我们还修复了 150 多个错误。有一些重要的行为和潜在的破坏性 API 更改;如果您不阅读其他内容,请务必阅读以下部分!
行为更改
现有 GWT 功能行为中的重要更改。
对 RPC 的重大更改
在以前的版本中,RPC 子系统过于宽松,无法在编译时警告潜在的(虽然不常见)边缘情况,这些情况理论上可能在运行时导致问题。从 1.4 版本开始,RPC 子系统会发出额外的警告和错误,以帮助您识别容易出错的结构。虽然这种新行为最初可能看起来很烦人,但请放心,修复您的代码以避免 RPC 警告将导致更小、更快、更可靠的应用程序。
以前有效的错误代码可能现在无效
以前,如果您在编译时通过 @gwt.typeArgs 声明了一个特定的组件类型,您通常可以免除在运行时传递不同的类型。例如,将 Date 放入 String 的 ArrayList 中可能有效。这种类型的代码现在不太可能有效,并且在将来可能会变得更加严格。底线:不要这样做。确保集合只包含声明的项目类型(或其子类型)。
Serializable 等效于 IsSerializable
虽然 GWT 的 RPC 机制不声称遵守 Java 序列化的语义,但根据用户的普遍要求,Serializable 和 IsSerializable 现在在 RPC 的目的上是等效的。这应该会提高服务器端互操作性,并减少对 DTO 的需求。
- 警告缺少 gwt.typeArgs 每个 Collection 或 Map 类型都应该有一个关联的 gwt.typeArgs javadoc 注释。过去,缺少 @gwt.typeArgs 通常不会产生明显的影响,因为 RPC 系统中的一个错误会为所有可序列化类型生成代码,即使它们未在您的服务接口中使用。现在这个错误已被修复,您可以通过修复这些警告来显着减小已编译输出的大小。
- 警告可序列化子类违反序列化限制 如果一个类可以分配给 IsSerializable 或 Serializable,但缺少默认构造函数或包含无法序列化的字段,则会发出 RPC 警告。 务必解决这些警告,以避免在运行时抛出异常的罕见但令人困惑的情况。
警告非瞬态、最终实例字段
RPC 从未真正序列化
final
实例字段,但现在它明确警告了此类字段的存在,除非它们也是transient
。 因此,可以通过使final
实例字段也成为transient
来解决警告,也可以通过模块属性来抑制警告。- 警告实现 IsSerializable 或 Serializable 的本地和非静态嵌套类型 RPC 从未序列化过这些类型的类,现在将生成警告。
警告可序列化类中的本机方法
尝试序列化包含
native
方法的类将在服务器端代码调用这些方法时导致 UnsatisfiedLinkErrors。
模块脚本标签
- 在 GWT 的早期版本中,通过模块
<script>
标签包含外部 JavaScript 文件需要嵌套的 JavaScript 表达式(称为脚本就绪函数),它将确定脚本是否已成功加载。 现在脚本加载顺序由系统自动处理,并且这些表达式将被忽略。 在托管模式下将发出警告。 有关参考,请参阅 此处。
与 JSNI 相关的其他托管模式检查
- 以前,当将值从 JavaScript 传递到 Java 时,托管模式会静默地将不正确类型的 JavaScript 值强制转换为声明的 Java 类型。 不幸的是,这将允许代码在托管模式下工作,但在 Web 模式下可能会以意外的方式失败。 现在,如果尝试传递不兼容的类型,托管模式将抛出 HostedModeException。 有关更多详细信息,请参阅 此处。
重大 API 更改
此版本还包含 API 更改,这些更改可能需要对现有代码进行一些小调整。 任何影响您的此类更改只需要几分钟即可修复。
#### JavaScriptObject
- 虽然不支持对 JavaScriptObject 进行子类化,但有些人还是冒着风险进行了子类化 :) 请注意,现有的 (int) 构造函数已被删除,取而代之的是受保护的无参数构造函数。 阅读 Element 的源代码,了解如何对 JavaScriptObject 进行子类化(如果支持子类化……当然,它是不支持的)。
#### DeferredCommand
- 为了支持新的 IncrementalCommand 接口,add() 方法已弃用,取而代之的是 addCommand()。 如果我们只是添加了一个新的方法重载,则传递了 null 字面量的现有代码将无法编译。
- 应使用新的 addPause() 方法代替 add(null)。
#### UIObject
- UIObject(以及所有小部件)中已正式化样式名称的预期用途和行为。 现在所有样式名称都被归类为“主要”、“次要”和“依赖”样式,它们的含义在 UIObject 文档中详细说明。 相关方法签名保持不变(get/setStyleName()、add/removeStyleName()),大多数小部件应不受影响。 但是,一项可能破坏性的更改是,如果尝试使用 removeStyleName() 删除小部件的主要样式名称,则会抛出异常。 有关完整说明,请参阅 UIObject 文档。
新功能
以下是 GWT 1.4 中一些最酷的新功能和增强功能。
大小和速度优化
- GWT 编译器中的新 大小 改进 生成的 JavaScript 比以前小 10-20%;只需使用 1.4 重新编译您的应用程序即可。
- 改进的启动序列将模块的启动脚本大小减少了 80%。 更重要的是,新的启动序列消除了 HTTP 往返,使启动延迟快了大约 33%。
- 上述优化与 ImageBundle 相结合,使得基于 GWT 的应用程序能够以惊人的速度加载。 为了亲身体验,请查看 Mail 示例的启动时间。
部署增强功能
小部件和库增强功能
- RichTextArea 允许对富文本编辑进行“即插即用”功能。
- SuggestBox 使添加自动完成功能变得容易。
- 分隔符! HorizontalSplitPanel 和 VerticalSplitPanel 使您能够调整用户界面部分的大小。
- PushButton 和 ToggleButton 是易于自定义的按钮小部件,可以增强 UI 的外观和感觉。
- DisclosurePanel 是一个简单、美观的面板,使用户能够轻松地隐藏和显示应用程序 UI 的部分。
- DateTimeFormat 和 NumberFormat 使为世界各地的用户格式化和解析日期、时间和数字变得容易。
- IncrementalCommand 可帮助您在客户端代码中实现长时间运行的任务,而不会触发“脚本过慢”警告。
- 一个新的 基准测试子系统 与 JUnit 集成,使您能够记录和比较代码片段在多个浏览器和多个参数范围内的速度。 基准测试是识别瓶颈和比较备选实现性能的强大方法。
- 经常被请求的 java.io.Serializable 现在已包含在 JRE 模拟库中,对于 GWT RPC 而言,它与 IsSerializable 同义。
- 鼠标滚轮事件 现在可用于各种小部件。
-
- ImageBundle 是此版本中最大的“不得不看”功能。 ImageBundle 使将数十张图像组合到一个“图像条”中变得极其容易,从而将原本的数十个 HTTP 请求压缩成一个请求:一个永久可缓存的图像文件。
- ImageBundle 会自动为您管理所有内容,从计算裁剪矩形到使透明 PNG 在 IE6 中正常工作。 您甚至可以选择以 Image 小部件或纯 HTML 格式获取裁剪后的图像,以将其包含在更大的 HTML 模板中。
- 除了支持闪电般快速的启动之外,ImageBundle 还可以在启动时使 UI 显得更好。 典型的 AJAX 应用程序在逐个加载图像时会表现出“弹跳重新布局”。 历史上,修复这个问题需要费力地预先初始化每个图像的宽度和高度。 ImageBundle 会自动执行相同的操作。 每个裁剪图像的尺寸在编译时计算,同时创建捆绑的图像文件。 瞧! 结果是一个快速、美观的用户启动体验,无需 GWT 开发人员额外的工作来保持最新。
- 有关更多详细信息,请参阅 文档部分。
有关此版本中 所有增强功能的完整列表,请参阅 GWT 问题跟踪器。
已修复问题
有关此版本中 所有错误修复的完整列表,请参阅 GWT 问题跟踪器。
1.3.3 版本说明
此版本与 1.3.1 相比,只有少量功能变化,如下所示。
已修复问题
- 问题 #319 - 在实现类中调用本机超类方法会导致 Web 模式下出现无限循环
- 问题 #496 - gwt.js in gwt-user.jar 缺少 Apache 2.0 许可证头
- 问题 #497 - 意外的内部编译器错误 - 分析排列 #1
1.3.1 版本说明 (RC)
这是 GWT 1.3 的候选版本,这是 GWT 的第一个完全开源版本。 此版本没有新功能,但我们确实对源代码和构建脚本进行了大量更改,以使其形状美观,为持续的开源开发做好准备。 尽管更改相对无害——格式化、排序、更多文档和新的构建系统——但始终存在很小的出现问题的可能性,因此,在我们确信它可靠之前,我们计划称之为候选版本。
有用链接
- 使 GWT 变得更好 这是我们新的 GWT 开源章程,描述了我们计划如何运营项目以及如何访问 GWT 源代码、自行编译它以及进行贡献。
- GWT 问题跟踪器 请在 GWT 问题跟踪器中报告 1.3 RC 中存在的但 1.2.22 中不存在的任何错误。 这些错误很可能是与新的构建相关的,我们希望尽快了解它们以便可以修复它们。
- GWT Git 存储库 访问在线存储库以浏览 GWT 源代码,无需使用 Git 客户端。
1.2.22 版本说明
这是官方的 GWT 1.2 版本,是 GWT 1.2 候选版本 的后续版本。 它包含 GWT 1.2 RC 中的所有增强功能和错误修复,以及针对 GWT 1.2 RC 报告的一些其他错误修复。
关于 OS X 托管模式支持
GWT 的托管模式支持仅在 OS X 1.4(Tiger)或更高版本上可用。
有用链接
- 自 RC 以来包含在 GWT 1.2 中的更改 另请参阅 GWT 博客,了解有关 与 1.2 RC 相关的值得注意问题 的讨论。
- GWT 1.2 RC 中的新功能和错误修复
重大 API 更改
对 1.2 之前的 API 没有重大更改,但已在 1.2 RC 中新添加的一个类中重命名了一个方法。
com.google.gwt.http.client.RequestBuilder
方法addHeader()
已重命名为setHeader()
,以更清楚地反映其意图。 只有在您使用自构建 1.2.11 起提供的新的 HTTP 功能时,才会受到此更改的影响。
1.2.11 版本说明 (RC)
这是 GWT 1.2 的候选版本。 在此构建与随后的 GWT 1.2 正式版本之间,更改仅限于 GWT 1.2 RC 独有的问题。
有关此版本中 所有增强功能和错误修复的完整列表,请参阅 GWT 问题跟踪器。
新功能
- 全面支持 OS X 开发像在 Linux 和 Windows 上一样轻松地在 OS X 上使用 GWT 进行开发
- 托管模式速度大幅提升托管模式启动时间已显著提升,更重要的是,即使您的源代码发生变化,刷新速度也变得飞快。
- **新的 HTTP 请求模块 **GWT 用户一直在请求的 HTTP 功能(自定义标头、状态代码、超时等等),全部封装在一个比 JavaScript XMLHttpRequest 对象更容易使用的 API 中
- **TreeItem 中的 Widget **TreeItem 现在可以包含任意 Widget... 终于,您可以轻松创建带有复选框的树:-)。
1.1.10 版本说明
已修复问题
- 规范化了 GWT.getModuleBaseURL() 在托管模式、Web 模式、RPC 和自动资源注入方面的行为(帖子 #1、帖子 #2、帖子 #3)
- 澄清了 Grid 类中有关行/列越界错误的信息(帖子)
- i18nCreator 已修复,可以与 Java 5.0 一起使用(帖子)
- I18NSync(以及因此的 -i18n 脚本)已更改,在生成方法名称时用下划线替换点(帖子)
- 在 JSON 字符串中添加了额外的字符转义(帖子)
- 修复了在嵌套 JSON 对象上调用 toString() 时出现的错误(帖子)
- 修复了导致 FocusPanel 中文本的默认字体大小为零的错误帖子
- 修复了 TabPanel.insert() 与 asHTML 参数一起使用时的问题(帖子)
- 弹出窗口和对话框在 IE6 中不再与列表和组合框重叠(帖子)
- 对话框不再可以拖动到浏览器窗口左上角之外(帖子)
- FormPanel 中的按钮在 Firefox 中不再自动提交;这在一些版本的 Safari 和 Opera 中仍然是一个问题(帖子)
- TabPanel 现在将内部 DeckPanel 的高度设置为 100%,以确保使用所有可用空间(帖子)
- 修复了 Mozilla 中导致 DialogBox.onKeyPressPreview() 将键识别为 0 的错误(帖子)
- DockPanel 不再使用 DeferredCommand 进行布局;这使得正确测量 PopupPanel 的大小成为可能(帖子)
- SimplePanel 不再是抽象的
- 双击现在在 IE6 上可以正确触发(帖子)
- 修复了 RPC 错误,该错误导致使用自引用对象图进行反序列化时出现错误或无限循环(帖子)
- 修复了 RPC 错误,该错误导致在包含空字符的字符数组上进行反序列化时失败(帖子)
- 超类由自定义字段序列化器序列化的可序列化类现在可以在服务器上正确反序列化
- 修复了与 FocusPanel 相关的错误,该错误有时在 RPC 异步响应期间出现(帖子)
- 修复了 JUnit assertEquals() 中针对浮点数的错误(delta 未正确处理)(帖子)
- 修复了与嵌套本地子类、空 for 循环表达式和无操作一元加运算符相关的内部编译器错误。(帖子 #1、帖子 #2、帖子 #3)
- 修复了 Integer.toHexString() 中的无限循环(帖子)
- 编译器现在处理项目结构中的文件系统符号链接(帖子)
- 修复了 Windows 托管模式中与 JSNI 函数指针相关的罕见 JVM 崩溃问题
1.1.0 版本说明 (RC)
新功能
- FileUpload 小部件 备受期待的文件上传小部件
- FormPanel 小部件 轻松从 GWT 应用程序提交传统的 HTML 表单
- RPC 优化 客户端和服务器性能提升以及更紧凑的线格式
- 自动资源注入 模块可以包含对外部 JavaScript 和 CSS 文件的引用,导致它们在模块本身加载时自动加载
- 国际化 轻松本地化字符串和格式化消息
- XML 类 基于 W3C DOM 的 XML 库
- JSON 类 JSON 已移至
gwt-user.jar
,并且比与 1.0.21 一起提供的示例快得多 - JUnit 增强 单元测试比 1.0.21 快得多,配置更简单,并且您现在可以测试异步事物,例如 RPC 和计时器
- Javadoc 现在包含在内,方便您使用,包含代码片段示例
gwt-servlet.jar
虽然您应该像往常一样继续针对gwt-user.jar
进行构建,但您只需要将gwt-servlet.jar
部署到您的 Web 应用程序中;它包含支持 RPC 所需的gwt-user.jar
子集。此外,还修复了许多错误,这些错误是根据我们在开发者论坛中收到的众多反馈意见而进行的。请参阅 其他版本说明,以获取有关 GWT 自上次发布以来其他重要更改的详细信息,包括一些可能会影响您的 API 更改,我们不希望您措手不及。
已修复问题
- 问题 #4794724 - 由于 gwt-user.jar 包含 javax.servlet 类而导致的 Servlet 容器问题
- 问题 #1676686 - Windows 2000 中的托管模式问题
- 问题 #6606675 - ListBox 和 Image 小部件缺少 CSS 样式名称
- 问题 #5922226 - 从接口类型到具体类类型的强制转换可能会失败
- 问题 #4137736 - 从字段初始化程序引用外部局部变量会导致 NullPointerException
- 问题 #2518888 - 构造函数中的“return”语句存在问题
- 问题 #9984353 - 当系统设置为非英语语言环境时,托管模式服务器会抛出 IllegalArgumentException
- 问题 #3733199 - 通过 resizeRows() 缩小 Grid 会导致状态不一致
- 问题 #7659250 - 默认的 Fedora Core 5 上的托管模式会抱怨缺少 libstdc++.so.5
- 问题 #6531240 - 空的 if、while、do 和 for 语句会导致编译器错误
- 问题 #4927592 - for 循环初始化程序中的多个初始化会导致内部编译器错误。
请参阅 已修复问题附录,以获取有关此版本中修复的所有重大和次要问题的详细列表,包括较小的问题。
行为更改
现有 GWT 功能行为中的重要更改。
模块源代码和公共路径
- 在 GWT 的先前版本中,源代码和公共路径包含基于物理目录结构;只有物理位于模块中的文件才会被包含。从现在开始,源代码和公共路径包含基于逻辑包结构。一旦包含了一个包,该包中的任何文件都将可见,无论它们物理位于何处。
JUnit 模块
- GWT 测试模块(即,旨在运行 GWTTestCase 派生 JUnit 测试用例的模块)不再需要继承
com.google.gwt.junit.JUnit
模块。此外,在测试模块中声明入口点不再是错误(在 JUnit 下运行时它们将被忽略)。大多数测试用例现在可以使用现有的应用程序模块,这应该简化测试用例配置。
重大 API 更改
根据用户反馈,我们在本版本中进行了一些 API 更改,这些更改可能需要在升级时对现有代码进行少量调整。任何可能影响您的更改都只需几分钟即可修复。
com.google.gwt.user.client.ui.HasWidgets
- 我们将 add()、remove() 和 clear() 移到了此接口中,这样任何可以包含其他小部件的小部件都将绑定到此契约。
- add() 方法不再返回布尔值。如果面板无法在没有额外参数的情况下添加子小部件,或者无法接受更多小部件,它将抛出异常。这符合通常情况下这是代码错误导致的结果这一事实。
- 它的迭代器现在需要支持 remove() 方法。
com.google.gwt.user.client.ui.Composite
- 复合组件现在必须在它们的构造函数中调用 initWidget(),而不是 setWidget()。这更能体现其实际目的,也有助于消除与 SimplePanel 的 setWidget() 方法的混淆。Composite.setWidget() 现在已弃用。
com.google.gwt.user.client.ui.SimplePanel 及其子类
- 我们在 SimplePanel 中添加了 setWidget(),它对只能包含一个子元素的面板具有更合适的语义。add() 方法仍然通过 HasWidgets 接口存在,但如果已经存在小部件,它将失败。此更改最有可能影响您使用 DialogBox 或 PopupPanel 的情况。要修复它,只需将对 add() 的调用更改为 setWidget() 即可。
com.google.gwt.user.client.Cookies
- Cookies.getCookie() 现在是静态的,它应该从一开始就是这样。现在不需要实例化此类了。
- 您现在也可以设置 Cookie 了!
附录:已修复问题完整列表
以下问题列表是对本版本中修复的所有重大和次要问题的简短概述。有关重要的常见问题,请参阅 在线 GWT 问题数据库。
- String.matches(regex) 应该存在,但实际上不存在
- 需要一种方法来设置单个列表项的选中/未选中状态(适用于多选列表框)
- DOM 需要 setBooleanAttribute、getBooleanAttribute。
- HTMLTable.CellFormatter 需要 getStyleName() 来匹配 setStyleName()。
- FlexTable 的内部小部件映射无法正确调整以适应用户插入的行和单元格。
Window.getTitle/setTitle 应该为静态
文件名中的字符会导致编译失败。
- DynaTable 的 HTML 不正确
- 将 Timer API 更改为使用 int 而不是 long
- 在托管模式 JSNI 中,将 Java long 作为 VT_R8 进行封送处理
- 弹出窗口在 Safari 上并非始终正确定位。
- SWT 源代码包含不正确。
- Safari 在某些情况下退出时会崩溃。
- TreeLogger 在控制台模式下会丢弃异常信息。
- Window 需要一个私有构造函数
- 电话回家版本检查应该实际比较版本号的顺序
- 当系统设置为非英语语言环境时,托管模式服务器会抛出 IllegalArgumentException
- 树有一个难看的 16 像素左边距。
- SimplePanel.remove() 已损坏。
- ScrollPanel 没有实现 SourcesScrollEvents。
- 将 junit-web 输出到 www 目录
- 向 ArgHandler 系统添加“隐藏”功能。
- JUnitShell 可能永远挂起。
- 1.5 VM 由于 StackTraceElement 的无参数构造函数消失,无法运行 junit。
- Panel 和 ComplexPanel 仍然包含来自旧版 HasWidgets 的方法。
- 嵌套表格可能会从错误的表格中触发事件。
- 确保对函数的 JSNI 引用可以传递和用作真正的函数指针。
- AbsolutePanel 无法始终如一地定位其子元素。
- JSONParser 未能正确处理编码 JSON 字符串中的泛型 JSONValues;始终假设其为 JSONObject。
- 从 GWTShell 中删除 -notHeadless(仅适用于 GWTUnitTestShell)。
- Java/JavaScript 中 split() 返回的结果数量不同(请参见说明)。
- 辅助脚本不适用于基本包。
- Grid 在删除时未能更新行计数。
- JSONString、toString 未能将其字符用双引号括起来。
- 从 TabPanel 中删除小部件时出现选择问题。
- JSONParser 始终假设根类型为 JSONObject。
- ClassSourceFileComposer 不应处理 Class 对象。
- 模块无法覆盖继承模块中的文件。
- Simple & ComplexPanel 不应实现 getChildCount()、getChild() 等。
- 传递到 JavaScript 中的负字节值变为正值。
- rpc servlet 需要一个线程本地 HttpServletResponse 来匹配线程本地请求。
- 将字符追加到字符串的行为不正确。
- 从 gwt-ll 中删除 STL 依赖项。
- 使用 xhtml 文档类型会导致弹出窗口在 Mozilla 浏览器中位置错误。
- JsniInjector 在存在 Javadoc 注释时未能匹配行。
- 为托管浏览器添加白名单绕过。
- PopupPanel 示例错误。
- UIObject 需要一个 title 属性。
- 本地类中的 JSNI 方法在托管模式下不起作用。
- HashMap 在某些情况下会抛出 JavaScript 错误。
- 源模块和公共模块标签应为逻辑而不是物理。
- 文档说明模块源标签和公共模块标签现在是逻辑而不是物理的。
默认的 .launch 文件未能使用项目的完整类路径。
- RemoteServiceServlet 在 WebSphere 下发送回 HTTP 200 OK,但没有内容。
- Widget.onLoad() 有时过早调用。
- 在 Panel 上使用 add(Widget) 是否真的是个好主意?
- 通过 RPC 报告的 Web 模式 JUnit。
- Tree 触发 onTreeItemStateChanged 两次。
- 将 JSON API 作为 gwt-user.jar 的一部分。
- 异步 JUnit。
- String.equalsIgnoreCase(null) 在 Web 模式下抛出异常。
- 使用类字面量作为修剪的类型会导致 ICE。
- 使 HasWidgets.iterator() 的所有内置实现支持 remove()。
- JSON 在 Web 模式下速度很慢。
- StringBuffer 使用字符串连接,因此速度为 n 平方。
- 相同的字符串在 Web 模式下可能比较为 false。
- 对属性提供程序环境进行调整,以支持语言环境并提高托管模式和 Web 模式之间的代码一致性。
对于大型数据集,服务器端序列化速度极慢,无法使用。
- 对于大型数据集,客户端序列化速度极慢,无法使用。
- 格式化 JUnitTestCaseStubGeneratorm、ServerSerializationStream 的源代码。
- MethodDispatch 在 IE 上无法正常工作。
- JavaScriptObject 救援不完整。
- 通过不引用非字符串来减少 RPC 线程大小。
- 循环对象图在服务器端反序列化期间可能会损坏。
- 抛出已检查异常的测试方法会导致生成的代码无法编译。
- 允许子类控制 RemoteServiceResponse 压缩。
- 启动时间错误导致 RootPanel.get(id) 抛出 NPE。
- 将白名单/黑名单设置更改为命令行开关,而不是系统属性。
- Mozilla 上按键事件的 KeyCode 始终为 0。
- 添加 Panel.remove(int) 方便方法。
- 文件上传小部件。
- PopupPanel 需要更好地处理为空的情况。
- CheckBox.setEnabled() 的意义相反。
- 历史记录标记在 URL 编码方面存在问题。
- 放宽 DockPanel.CENTER 子元素何时可以添加的限制。
- AbsolutePanel 需要 getWidgetLeft() 和 getWidgetTop()。
- 决定:FlowPanel 应该如何行为?
- 包含复合组件的示例需要调用 initWidget(),而不是已弃用的 setWidget()。
- RootPanel.get(String) 不应清除 div 的内容。
- ListBox、Image 和 Hyperlink 缺少样式名称,尽管有文档。
- Hyperlink.removeClickListener 已损坏。
- 不允许选项卡在 TabPanel 中内部换行。
- 土耳其语言环境与 RPC 生成的代码存在问题 - 可能也会影响其他语言环境。
- StackPanel.add() 完全混乱。
- 引用可能导致静态初始化的字段未能导致副作用。