我最近发布了一些关于使用Bean验证与各种表示技术的文章(这里这里)。现在Flex也加入了这个家族。在GraniteDS的好人们已经将Bean验证的支持添加到他们的项目中,因此所有Flex用户都可以使用Bean验证。

这项工作并不像JSF、Wicket或其他Java技术那样简单。因为它们不在JVM上运行,它们基本上是在Flex中重新实现了整个规范。

  • 你可以在ActionScript3对象上注解约束:它支持所有标准约束,你也可以编写自己的约束。
  • 你可以执行验证逻辑并检索错误报告。
  • 你可以使用大多数功能,包括高级功能,如分组、分组顺序等。

就像我们对JSF 2和Bean验证所做的那样,Flex表单会透明地调用基于你的领域模型的约束。对GraniteDS用户来说,如果他们通过Gas3在Java领域模型和ActionScript3领域模型之间同步,约束也会保持同步。

有几个需要注意的陷阱。这个端口并不是一对一的复制:由于ActionScript3的工作方式,一些接口或设计选择没有意义,但总体来说这是一个非常接近的端口。

  • 约束实现与约束声明在同一个类中(在动态语言中这不是问题)。
  • @Pattern有略微不同的语义,因为Flex中的正则表达式引擎略有不同。
  • 而不是由ConstraintValidatorContext提供的功能,你可以在你的约束中定义一个属性属性,使其属于多个子属性。虽然不够灵活,但在许多情况下已经足够好。
  • 以及可能的其他一些事情

无论如何,我不会和Franck说话,除非他完全遵守规范的实施。;) 实际上,我有一个真正的RFE:这个新验证模块的文档是“高级AS3功能”章节的一部分。我认为这个功能足够简单且足够有用,应该有一个更好的位置。

要获取完整文档,请查看这里。这些都是GraniteDS即将推出的2.2版本的组成部分。

PS:GraniteDS 2.2还提供了一个任意精度数的完整实现,这在Flex平台上令人惊讶地缺失。所以如果你使用Flex,并在银行或其他数值处理行业中,请查看他们的BigInteger和BigDecimal实现。


返回顶部