2012-02-28 93 views
3

在我的web應用程序中,我需要獲取用戶輸入的號碼並在controller中處理它。我需要確保該號碼的長度至少爲14位數。如果用戶輸入12位數字,然後按「空格」兩次,驗證應該會抓住它。修改參數在發送到控制器之前在playframework

我編寫它像這樣

public static void processNumber(@Required @MinSize(value=14,message="min size is 14") String inputNumber){ 
if(validation.hasErrors()) { 
    params.flash(); 
    validation.keep(); 
    ... 
    } 

}

然而,正如我expected..Looks一樣,我需要它到達控制器方法之前修正輸入這不起作用。

有人可以建議如何做到這一點?

P.S: 更復雜的情況會是怎樣

'11 2233444444' 輸入 ‘1122334ad44444’等,沒有任何驗證,以確保輸入的是一個數字,不包含任何字母字符?

回答

1

我不認爲自定義聯編程序會爲您提供您正在尋找的內容,因爲您不是試圖修改數據綁定的方式,而是驗證其中的內容。因此,我認爲你正在尋找的是一個自定義驗證器。

在這裏看到更多的信息 - http://www.playframework.org/documentation/1.2/validation#custom

但實際上,你可以只使用@CheckWith批註指定要使用的驗證,然後在你的驗證器,你可以檢查你的修剪字符串,不包含空格,並且沒有字母字符等。

請注意,驗證器不會修改您的輸入,因此如果您想忽略已修剪的數據,那麼這將繼續保留在您的數據中,因此您可以修改(修剪)它在驗證之後,或者您可以使用其他答案中討論的自定義聯編程序執行此操作。

+0

謝謝,我創建了一個自定義驗證器來執行此操作 – 2012-02-29 06:41:39

1

請檢查,可以幫助你在你想要做link

我希望它幫什麼。

+0

這是正確的答案。 – ripper234 2012-03-27 10:04:05

1

如果你想有至少一個14位的數值,其中一個方案是:用這種方法

public static void processNumber(@Required @Min(10000000000000) Long inputNumber) 

問題:

  • 允許的最大數量會9223372036854775807升
  • 它不會允許以「0」開頭的數字。

有些選項:

public static void processNumber(
    @Required @MinSize(value=14,message="min size is 14") String inputNumber){ 
validation.isTrue("inputNumber", !inputNumber.contains(" ")); 
if(validation.hasErrors()) { 

甚至更​​好:

public static void processNumber(
    @Required @MinSize(value=14,message="min size is 14") String inputNumber){ 
for(int i=0;i<inputNumber.length();i++) { 
    validation.isTrue("inputNumber", Character.isDigit(inputNumber.charAt(i))) 
if(validation.hasErrors()) { 
相關問題