2017-08-25 114 views
0

我有一個系統,我想遷移到vaadin 8.我想請求協助如何基於正則表達式驗證TextField。我有代碼適用於Vaadin 7,但不是Vaadin 8,這可以進一步解釋我所要求的。下面的代碼示例將非常感謝。如何驗證Vaadin 8表單中的TextField

TextField txtFirstname = new TextField(); 
txtFirstname.setInputPrompt("Enter the firstname e.g. John or Jane"); 
txtFirstname.addValidator(new RegexpValidator("^[a-zA-Z _\\-'\" ]{3,25}$", "Invalid FirstName")); 
txtFirstname.addBlurListener(new BlurListener() {   
    @Override 
    public void blur(BlurEvent event) { 
     //txtFirstname.validate(); 
     if(txtFirstname.isValid()==false) 
     { 
      txtFirstname.setValidationVisible(true); 
      //txtFirstname.focus(); 
     } 
     else if(txtFirstname.isValid()==true) 
      { 
        txtFirstname.setValidationVisible(false); 
      } 
     } 
    }); 
+0

你可能會提供細節,你有錯誤嗎?警告?其他? – azro

+0

上面的代碼在Vaadin 7中完美工作,但不能在Vaadin 8中工作。Vaadin 8中不存在isValid()方法。我基本上想知道如何在Vaadin 8中使用正則表達式驗證文本字段(我只知道如何正如我上面所指出的那樣爲Vaadin 7做)謝謝。 –

+0

您是否查看了[documentation](https://vaadin.com/docs/-/part/framework/components/components-fields.html#validating-field-values)?它應該足夠開始。如果您有具體的問題,我們一定會幫助您。 –

回答

0

我有工作在Vaadin了一下,但我沒有回頭「驗證」,所以我就提出了一個更簡單的方法:

TextField txtFirstname = new TextField(); 
txtFirstname.setInputPrompt("Enter the firstname e.g. John or Jane"); 
String pattern = "^[a-zA-Z _\\-'\" ]{3,25}$"; 

txtFirstname.addBlurListener(new BlurListener() {   
    @Override 
    public void blur(BlurEvent event) { 

     if(!txtFirstname.getValue().match(pattern)){ //<- basic string check 
      txtFirstname.setValidationVisible(true); 
      //txtFirstname.focus(); 
     } 
     else if(txtFirstname.isValid()==true){ 
      txtFirstname.setValidationVisible(false); 
     } 
    } 
}); 

並使用!booleanValue而不是booleanValue==false

+0

從來沒有想到這一點,謝謝。 .ValidationVisible和isValid()方法在Vaadin 8中有所描述,但您的代碼(匹配輸入到正則表達式)應該可以工作 –

+2

這不是Vaadin用於驗證表單字段的方式。首選的方法是使用「Binder」將字段綁定到其數據。使用'Binder',您可以像添加Vaadin 7一樣添加驗證器/轉換器。請參閱[docs](https://vaadin.com/docs/-/part/framework/components/components-fields.html#validating-field - 值) –