java - 如何验证 wicket 中的数字格式 TextField?

标签 java validation numbers wicket-6

在我的 maven-wicket (6.10) 应用程序中,我有一个 TextField,它有一个 Integer 类型属性模型。我想设置在此文本字段中输入的数字的最大长度。 (例如,用户应在“年龄”文本字段中写入最多 2 个字符)

我尝试过这段代码:

add(new TextField<>("age",new PropertyModel<(personModel,"age"))
    .add(StringValidator.maximumLength(2)));
//age is an Integer value from a Person class, personModel is "IModel<Person>" type

但我遇到了这个异常:

java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String
    at org.apache.wicket.validation.validator.StringValidator.getValue(StringValidator.java:87)
    at org.apache.wicket.validation.validator.StringValidator.getValue(StringValidator.java:59)
    at org.apache.wicket.validation.validator.AbstractRangeValidator.validate(AbstractRangeValidator.java:107)
    at org.apache.wicket.markup.html.form.FormComponent.validateValidators(FormComponent.java:1523)

所以如果属性模型不是字符串类型,我就不能使用StringValidator。我找到了使用 NumberValidator ( validators ) 的示例,但我无法解析 NumberValidator。我的源代码中只有这些 validator : validation source 我如何使用数字 validator ?或者我是否遗漏了一些东西,也许形成了 pom.xml 的 wicket 依赖项?

最佳答案

您面临的问题与 Wicket 的工作方式有关。首先,它将输入文本转换为模型对象,然后执行验证。

因此,您必须使用RangeValidator而不是StringValidator

IModel<Integer> model =
    new PropertyModel<Integer>(personModel, "age");
Component ageField = new TextField<Integer>("age", model);
add(ageField).add(RangeValidator.<Integer>range(0, 99));

请注意,我已将 Long 更改为 Integer,因为我认为将年龄保存为 Long 是不切实际的。

另请注意,NumberValidator 的链接适用于 Wicket 1.4,而您使用的是 Wicket 6。与以前的版本相比,Wicket 6 是一个较大的 API 更改。

关于java - 如何验证 wicket 中的数字格式 TextField?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21627899/

相关文章:

java - 在 Java Apache Spark 中对齐分区中的元素数量

java - 使用循环输入数组列表

ñÑ 字符的 Javascript 验证适用于 Chrome,但不适用于 Firefox

java - Android - 如何从 Web 浏览器与 Android 应用程序交互?

Java Swing Graphics2D drawString 启动慢?

cakephp - 如何在默认位置的其他位置显示CakePHP输入验证错误?

java - 在 Spring Boot 应用程序中验证 json

c++ - 如何访问第三方源文件中的函数?

ruby - 使用 for 循环将数字相加

matlab - 如何在matlab中随机生成极限[m,n]中的所有数字?