2011-05-28 51 views

回答

6

GXT和SmartGWT(我強烈建議,兩者都有很多原因)都有表單驗證。

GWT的編輯器框架提供的平均顯示javax.validation.ConstraintViolation(你仍然必須通過實施HasEditorErrors接收錯誤的某一領域做實際的顯示;編輯框架僅分派錯誤到適當的「田」)但沒有什麼可以在客戶端驗證。最近發佈的GWT 2.3已經在客戶端對JSR 303 Bean Validation進行了初步支持,但它尚未完成:http://code.google.com/p/google-web-toolkit/wiki/BeanValidation 我認爲GWT 2.4將有完整(或幾乎完整)的支持。

請注意,GWT在驗證方面的權益是驗證對象,而不是驗證編輯對象屬性的「表單域」。

+0

爲什麼你會建議針對GXT和SmartGWT? – 2011-05-28 23:51:58

+6

SmartGWT只是SmartClient的封裝,所以它不會從GWT編譯器所做的任何優化中受益。 GXT的體重過重(臃腫?),你在「Hello World」之後學到的第二件事是如何做一個「加載,請稍候」的初始屏幕(這是來自一本我被給予審查的書)。他們都沒有很好地集成GWT「本地」小部件(從我在線閱讀)。如果我想一點點,我相信我可以找到許多其他的理由。 – 2011-05-29 22:01:09

+9

如果您能夠抵制使用SmartGWT或GXT的誘惑,您應該抵制它。 SmartGWT和GXT展示的外觀非常吸引人,但是當你想要執行MVP/MVC甚至簡單的驗證時,他們的技術/協議期望與GWT並不一致,並且變得非常混亂。最好使用普通的GWT,並減弱應用程序的審美期望,然後逐漸在CSS上工作。在開始審美之前先讓你的應用程序工作。不要讓SmartGWT或GXT轉移你的使命。如果它對谷歌來說很好,那麼它對你來說是一個很好的選擇。 – 2011-06-02 02:30:46

8

在我的GWT應用程序中,我總是使用我的自定義驗證器類。我創建了我自己的文本框類,它擴展了gwt文本框。我調用CustomTextBox而不是gwt的文本框。

CustomTextBox.java

public class CustomTextBox extends TextBox implements HasValidators{ 

private static final String TEXTBOX_VALIDATION_ERROR_STYLE = "error-text-box"; 
private String errorMessage = ""; 
private List<Validator> validators = new ArrayList<Validator>(); 

public CustomTextBox() { 
    } 

public CustomTextBox(String name) { 
    setName(name); 
} 

public String getErrorMessage() { 
    return errorMessage; 
} 

public void setErrorMessage(String errorMessage) { 
    this.errorMessage = errorMessage; 
} 

public void addValidator(Validator validator) { 
    validators.add(validator); 
} 

public boolean validate() { 
    boolean validationResult = true; 
    for (Validator validator : validators) { 
     validationResult = validator.validate(getValue().trim()); 
     if (!validationResult) { 
      errorMessage = validator.getErrorMessage(); 
      break; 
     } 
     errorMessage = validator.getErrorMessage(); 
    } 
    setErrorStyles(validationResult); 
    return validationResult; 
} 

private void setErrorStyles(boolean validationResult) { 
    if (validationResult) { 
     removeStyleName(TEXTBOX_VALIDATION_ERROR_STYLE); 
     setTitle(""); 
    } else { 
     addStyleName(TEXTBOX_VALIDATION_ERROR_STYLE); 
     setTitle(errorMessage); 
    } 
} 

@Override 
public void setValue(String s) { 
    removeStyleDependentName(TEXTBOX_VALIDATION_ERROR_STYLE); 
    super.setValue(s); 
} 

@Override 
public String getValue() { 
    return super.getValue().trim(); 
} 
} 

Validator.java

public abstract class Validator { 

    public String errorMessage; 

    public abstract boolean validate(String value); 

    public abstract String getErrorMessage(); 
} 

樣品電子郵件驗證

public class EmailValidator extends Validator { 

public boolean validate(String value) { 
    if (value.matches("^[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,}$")) { 
     errorMessage = ""; 
     return true; 
    } else { 
     errorMessage = "Enter valid email Id"; 
     return false; 
    } 
} 

public String getErrorMessage() { 
    return errorMessage; 
} 
} 

我的驗證錯誤看起來像下面

Sample validation error

如果你喜歡這個方法,你可以按照這個。這裏的問題是我們不直接在UI中顯示錯誤消息。只有在我們展示的工具提示中。

+0

這看起來很簡單。有沒有框架解決方案? – 2011-05-29 07:55:30

+0

可能有一些其他的框架。但我沒有嘗試過。 – DonX 2011-05-30 12:38:39

+0

好解決方案。你可以分享「HasValidators」界面和「TEXTBOX_VALIDATION_ERROR_STYLE」css風格嗎? – MyTitle 2012-01-30 16:26:23

5

目前,我們正在使用這個項目的形式驗證: http://code.google.com/p/gwt-validation/

這是作爲新的GWT 2.4驗證框架的基礎源代碼。

克里斯布法羅一直在做這個項目的驚人的工作。爲我們開箱即用。