Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何验证wicket中的数字格式文本字段?_Java_Validation_Numbers_Wicket 6 - Fatal编程技术网

Java 如何验证wicket中的数字格式文本字段?

Java 如何验证wicket中的数字格式文本字段?,java,validation,numbers,wicket-6,Java,Validation,Numbers,Wicket 6,在我的maven wicket 6.10应用程序中,我有一个TextField,它有一个整数类型的属性模型。我想设置要在此文本字段中键入的numberts的最大长度。例如,用户应在年龄文本字段中最多写入2个字符 我尝试过以下代码: add(new TextField<>("age",new PropertyModel<(personModel,"age")) .add(StringValidator.maximumLength(2))); //age is an Int

在我的maven wicket 6.10应用程序中,我有一个TextField,它有一个整数类型的属性模型。我想设置要在此文本字段中键入的numberts的最大长度。例如,用户应在年龄文本字段中最多写入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
因此,如果属性模型不是字符串类型,我就不能使用StringValidator。我找到了使用NumberValidator的示例,但我无法解析NumberValidator。我在源代码中只有以下验证器:
我如何使用数字验证器?或者我遗漏了什么,可能是pom.xml对wicket的依赖关系?

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

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

请注意,我已经将Long改为整数,因为我认为将年龄保存为Long是不实际的


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

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

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

请注意,我已经将Long改为整数,因为我认为将年龄保存为Long是不实际的


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

为了将来的参考,请查看 在Op的情况下,您可以更轻松地执行以下操作:


供日后参考,请参阅 在Op的情况下,您可以更轻松地执行以下操作:


NumberTextField不是选项?NumberTextField不是选项?谢谢,看起来不错!但是我做了我自己的数字格式验证,但是你的回答很好-当然,定义自己的验证器是另一种方法。例如,如果验证值必须在两个范围之一或奇数范围内,这是唯一的解决方案。谢谢,看起来不错!但是我做了我自己的数字格式验证,但是你的回答很好-当然,定义自己的验证器是另一种方法。例如,如果验证值必须在两个范围之一或奇数范围内,则这是唯一的解决方案。
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)
IModel<Integer> model =
    new PropertyModel<Integer>(personModel, "age");
Component ageField = new TextField<Integer>("age", model);
add(ageField).add(RangeValidator.<Integer>range(0, 99));
IModel<Integer> model = new PropertyModel<Integer>(personModel, "age");
add(new NumberTextField<Integer>("age", model).setMinimum(0).setMaximum(99));