当用户输入字母字符时,在数字字段上播放验证

时间:2011-07-28 06:20:49

标签: java validation playframework

使用Play!框架,我有一个字段,要求用户输入大于零的数值。在我的控制器中,我有类似的东西:

public static void save(@Min(value = 1, message = "Age must be greater than zero") int age) {
     ...
}

这可以按预期工作,如果用户输入零或更少,则会显示错误消息。但是,如果用户输入abc之类的内容,则屏幕上显示的消息会显示Incorrect value

在这种情况下,如何让UI显示更加用户友好的错误消息,我该怎么办?

2 个答案:

答案 0 :(得分:5)

您可以尝试使用正则表达式来检查参数是否为数字。

public static void save( @Match(value = "[0-9]+", message="Age must be numeric")
                         @Min(value = 1, message="Age must be greater than zero") int age ) {
    ...
}

解决方法也可能是覆盖错误值的消息。

将其放入您的消息文件中。

validation.invalid=%s must be numeric

但是,这会改变整个应用程序的消息,但可能并不总是合适。

另一种可能的解决方案是清除验证,然后在save-Method中调用所需的所有验证:

public static void save( int age ) {
    validation.clear();
    validation.min(age, 1);
    ...
}

这将清除所有已自动完成的验证。然后你可以自己调用验证。

答案 1 :(得分:1)

如何将参数类型更改为String?

public static void save( @Min(value = 1, message="Age must be greater than zero") String age ) {
    if(Validation.hasError()) {
      Validation.keep();
      index();
    }

    int intAge = Integer.parseInt(age);
    ...
}