2011-07-28 54 views
2

使用Play!框架,我有一个字段,要求用户输入一个大于零的数值。在我的控制,我有这样的事情:当用户输入字母字符时,对数字字段进行验证

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

可正常工作,如果用户在小于或等于零进入显示错误消息。但是,如果用户输入诸如abc之类的信息,则屏幕上显示的消息为Incorrect value

为了让UI在这种情况下显示更友好的错误消息,我需要做些什么?

回答

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 

但是,这将改变整个应用程序的消息,并不总是适当的。

另一种可能的解决方案是清除验证,然后调用你想要的所有验证您保存法:

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

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

+0

谢谢。我试过,但它仍然说不正确的值而不是消息。 Play似乎确定了“年龄”参数是“int”并且甚至不执行验证注释的事实。如果我删除了Match和Min注释,它仍然会显示'不正确的值'。 – digiarnie

+0

我已经用一些其他可能的解决方案更新了我的答案。 – david

1

如何将参数类型更改为字符串?

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); 
    ... 
}