在播放框架中发送到控制器之前修剪参数

时间:2012-02-28 13:23:30

标签: java playframework

在我的网络应用程序中,我需要获取用户输入的号码并在控制器中处理它。我需要确保该号码的长度至少为14位。如果用户输入12位数然后按'空格'两次,验证应该抓住它。

我像这样编码

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

}

然而,这并不像我预期的那样工作。看起来,我需要在输入到达控制器方法之前修剪输入。

有人可以建议怎么做吗?

P.S: 将输入更复杂的案例,如

'11 2233444444' '1122334ad44444'等,是否有任何验证以确保输入是一个数字并且不包含任何字母字符?

3 个答案:

答案 0 :(得分:1)

请检查这是否可以帮助您做您想做的事情link

我希望它有所帮助。

答案 1 :(得分:1)

我不认为自定义绑定器会为您提供所需的内容,因为您不是要修改数据的绑定方式,而是要验证其中的内容。因此,我认为您正在寻找的是一个自定义验证器。

有关详细信息,请参阅此处 - http://www.playframework.org/documentation/1.2/validation#custom

但实际上,您可以使用@CheckWith批注指定要使用的验证器,然后在验证器中,您可以检查修剪过的字符串,不包含空格,也没有字母字符等。

请注意,验证器不会修改您的输入,因此如果您想忽略修剪后的数据,那么这将继续留在您的数据中,因此您可以在验证后修改(修剪)它,或者您可以使用另一个答案中讨论的自定义绑定器来完成它。

答案 2 :(得分:1)

如果您想拥有一个至少有14位数的数字,一个选项是:

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

此方法存在问题:

  • 允许的最大数量为9223372036854775807l
  • 不允许以“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()) {