3

有一个专为触摸屏(到处都是大按钮)设计的 Java Swing 应用程序,其中包含许多表单,像往常一样,带有输入字段(文本框、组合、复选框、单选...)+ 一个用于保存数据的按钮.

我需要一种“通用”的方式来实现验证器(必需的,仅数字,正则表达式,...),在按钮单击时触发显示验证摘要(可能在消息框上),非常类似于 ASP .NET 的验证器系统,其中您将一堆验证器与您的按钮一起分配给同一验证组中的输入字段,并且在每个验证器通过测试之前不会触发单击事件。

问题是如何实现或使用哪个框架来实现这种验证风格?

到目前为止,我在网上看到了 3 个选项,但没有一个适合我的需求:

  • Java Swing 的 InputVerfier 类:这很简单而且很好,但是当输入失去焦点并且对于触摸屏用户来说真的很烦人时可以工作。

  • Simple Validation API:它是我的验证风格最接近的 API,但它似乎与底部显示错误的验证面板紧密耦合。我可以使用此 API 的变体来更改它在屏幕上显示错误的方式。

  • JGoodies 验证:似乎太强大了,但找不到任何简单的例子,而且我没有实现任何模型模式,因为它似乎需要这个框架。

4

1 回答 1

0

OVal (http://http://oval.sourceforge.net/) 可以完全满足您的需求。

假设您有一个占位符,用于表示来自您的表单的所有值。当用户提交表单时,它可以构建并填充实际数据。OVal 允许您为类字段定义约束:

public class BusinessObject {

  @NotNull
  @NotEmpty
  @Length(max=32)
  private String name;

  ...
}

定义好之后,您可以轻松触发验证过程。OVal 将为您提供违规列表,以便您轻松构建摘要对话。

Validator validator = new Validator();
BusinessObject bo = new BusinessObject();

// collect the constraint violations
List<ConstraintViolation> violations = validator.validate(bo);

您可以通过使用 getters 约束摆脱中间占位符。

public class BusinessObject {

  @IsInvariant
  @NotNull 
  @Length(max = 4)
  public String getName() {
  ...
  }
}

请注意,OVal 遵循简洁的设计原则,可以轻松扩展。无论如何,它提供了很多开箱即用的功能:

  • 使用表达式语言的条件约束
  • 嵌套属性的约束
  • 递归验证
  • 方法参数的约束
  • 前置条件的脚本表达式
  • 方法返回值约束
  • 探测模式以简化 UI 用户输入验证
  • 以及更多

请参阅http://oval.sourceforge.net/userguide.html

于 2012-10-08T10:58:36.617 回答