2012-02-28 74 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()) {