2012-09-20 164 views
3

有一個專爲觸摸屏設計的Java Swing應用程序(到處都是大按鈕),並且有許多窗體,像往常一樣由輸入字段(文本框,組合框,複選框,收音機,...)+一個按鈕來保存數據。我需要一個「通用」的方式來實現驗證器(必需的,只有數字,正則表達式,...),它觸發按鈕的點擊,顯示驗證摘要(可能在消息框中),非常像ASP .NET的驗證器系統,您可以在同一個驗證組中將您的輸入字段與您的按鈕一起分配一組驗證器,並且在每個驗證器通過測試之前單擊事件不會被觸發。按鈕點擊(Java swing)的火驗證

問題是如何實現或使用哪種框架來驗證這種風格?

到目前爲止,我已經看到了網絡上的3個選項,其中沒有一個適合我的需要:

  • 的Java Swing的InputVerfier類:這是簡單而漂亮的,但是當輸入losts關注並會真正起作用惱人的觸摸屏用戶。

  • 簡單的驗證API:它是我的驗證的風格最接近的API,但它似乎是緊耦合到一個驗證面板顯示了底部的錯誤。我可以使用這個API的變體來改變它在屏幕上顯示錯誤的方式。

  • JGoodies數據驗證:似乎過於強大,但無法找到任何簡單的例子,因爲它似乎有需要用這個框架我沒有實施任何模型模式。

回答

0

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

讓我們假設你有一個來自你的表單的所有值的佔位符。當用戶提交表單時,它可以用實際數據構建和填充。 橢圓形允許你定義爲類的約束:

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用戶輸入vali dation
  • 和更

請參閱http://oval.sourceforge.net/userguide.html