You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Warren Bell <wa...@gmail.com> on 2009/03/17 06:17:59 UTC
Correct use of RangeValidator
I am getting a ClassCastException when using RangeValidator like this:
RequiredTextField<Integer> intField = new
RequiredTextField<Integer>("intField");
intField.add(new RangeValidator(0, 100));
or like this:
RequiredTextField<Integer> intField = new
RequiredTextField<Integer>("intField");
intField.add(new RangeValidator<Integer>(0, 100));
WicketMessage: Exception 'java.lang.ClassCastException:
java.lang.Integer' occurred during validation
org.apache.wicket.validation.validator.RangeValidator on component
2:body:recvAnalisysForm:intField Root
cause:java.lang.ClassCastException: java.lang.Integer at
java.lang.String.compareTo(String.java:90)
The example app shows it coded this way, but NumberValidator has been
deprecated.
add(new
RequiredTextField<Integer>("integerInRangeProperty").add(NumberValidator.range(0,
100)));
What is the correct way of using RangeValidator and how do you type it?
Warren
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: Correct use of RangeValidator
Posted by Matej Knopp <ma...@gmail.com>.
If you are using a map TextField can't determine the type.
-Matej
On Tue, Mar 17, 2009 at 9:27 PM, Igor Vaynberg <ig...@gmail.com> wrote:
> if you use a propertymodel alongside a formcomponent then yes, but it
> is not the generic you declare that is used, it is the model
> performing a runtime reflection check on the type of getter/field it
> is using.
>
> -igor
>
> On Tue, Mar 17, 2009 at 12:08 PM, Adriano dos Santos Fernandes
> <ad...@uol.com.br> wrote:
>> Igor Vaynberg escreveu:
>>>
>>> textfield doesnt know that it has been declared as textfield<integer>
>>> at runtime unless it is an anonymous class. welcome to java generics.
>>> lookup type erasure.
>>
>> Hmm... And what about work done using IObjectClassAwareModel?
>>
>> It seems to work for me, I never need to pass Integer.class to
>> TextType<Integer>...
>>
>>
>> Adriano
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: Correct use of RangeValidator
Posted by Igor Vaynberg <ig...@gmail.com>.
if you use a propertymodel alongside a formcomponent then yes, but it
is not the generic you declare that is used, it is the model
performing a runtime reflection check on the type of getter/field it
is using.
-igor
On Tue, Mar 17, 2009 at 12:08 PM, Adriano dos Santos Fernandes
<ad...@uol.com.br> wrote:
> Igor Vaynberg escreveu:
>>
>> textfield doesnt know that it has been declared as textfield<integer>
>> at runtime unless it is an anonymous class. welcome to java generics.
>> lookup type erasure.
>
> Hmm... And what about work done using IObjectClassAwareModel?
>
> It seems to work for me, I never need to pass Integer.class to
> TextType<Integer>...
>
>
> Adriano
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: Correct use of RangeValidator
Posted by Adriano dos Santos Fernandes <ad...@uol.com.br>.
Igor Vaynberg escreveu:
> textfield doesnt know that it has been declared as textfield<integer>
> at runtime unless it is an anonymous class. welcome to java generics.
> lookup type erasure.
Hmm... And what about work done using IObjectClassAwareModel?
It seems to work for me, I never need to pass Integer.class to
TextType<Integer>...
Adriano
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: Correct use of RangeValidator
Posted by Igor Vaynberg <ig...@gmail.com>.
textfield doesnt know that it has been declared as textfield<integer>
at runtime unless it is an anonymous class. welcome to java generics.
lookup type erasure.
-igor
On Tue, Mar 17, 2009 at 11:44 AM, Warren Bell <wa...@gmail.com> wrote:
> I thought that I was telling the TextField, by the type <Integer>, that it's
> model object is an integer. And I thought that it would retrieve its value
> from the model I set on it's form.
>
> super(name, new CompoundPropertyModel<ValueMap>(valueMap)
>
> valueMap is an existing ValueMap with a value with key "intField" and that
> ValueMap#getAsInteger("intField") would be called. I guess
> ValueMap#getString("intField") is being called. Is it the ValueMap that is
> messing me up? What am I missing?
>
> Igor Vaynberg wrote:
>>
>> to construct a textfield that works with integer you either have to
>> pass Integer.class as a constructor arg, or call
>> setType(Integer.class);
>>
>> -igor
>>
>> On Tue, Mar 17, 2009 at 8:21 AM, Wilhelmsen Tor Iver <To...@arrive.no>
>> wrote:
>>
>>>>
>>>> WicketMessage: Exception 'java.lang.ClassCastException:
>>>> java.lang.Integer' occurred during validation
>>>> org.apache.wicket.validation.validator.RangeValidator on component
>>>> 2:body:recvAnalisysForm:intField Root
>>>> cause:java.lang.ClassCastException: java.lang.Integer at
>>>> java.lang.String.compareTo(String.java:90)
>>>>
>>>
>>> According to the error message, the validator gets a String value here;
>>> have you checked the actual IModel used by the field? The default Model
>>> for *TextField uses String IIRC...
>>>
>>> IModel<Integer> model = new PropertyModel<Integer>(theBean, "intField");
>>> RequiredTextField<Integer> intField = new
>>> RequiredTextField<Integer>("intField", model);
>>> intField.add(new RangeValidator<Integer>(0, 100));
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>>> For additional commands, e-mail: users-help@wicket.apache.org
>>>
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>
>
> --
> Thanks,
>
> Warren Bell
> 909-645-8864
> warrenbell2@gmail.com
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: Correct use of RangeValidator
Posted by Warren Bell <wa...@gmail.com>.
I thought that I was telling the TextField, by the type <Integer>, that
it's model object is an integer. And I thought that it would retrieve
its value from the model I set on it's form.
super(name, new CompoundPropertyModel<ValueMap>(valueMap)
valueMap is an existing ValueMap with a value with key "intField" and
that ValueMap#getAsInteger("intField") would be called. I guess
ValueMap#getString("intField") is being called. Is it the ValueMap that
is messing me up? What am I missing?
Igor Vaynberg wrote:
> to construct a textfield that works with integer you either have to
> pass Integer.class as a constructor arg, or call
> setType(Integer.class);
>
> -igor
>
> On Tue, Mar 17, 2009 at 8:21 AM, Wilhelmsen Tor Iver <To...@arrive.no> wrote:
>
>>> WicketMessage: Exception 'java.lang.ClassCastException:
>>> java.lang.Integer' occurred during validation
>>> org.apache.wicket.validation.validator.RangeValidator on component
>>> 2:body:recvAnalisysForm:intField Root
>>> cause:java.lang.ClassCastException: java.lang.Integer at
>>> java.lang.String.compareTo(String.java:90)
>>>
>> According to the error message, the validator gets a String value here;
>> have you checked the actual IModel used by the field? The default Model
>> for *TextField uses String IIRC...
>>
>> IModel<Integer> model = new PropertyModel<Integer>(theBean, "intField");
>> RequiredTextField<Integer> intField = new
>> RequiredTextField<Integer>("intField", model);
>> intField.add(new RangeValidator<Integer>(0, 100));
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
--
Thanks,
Warren Bell
909-645-8864
warrenbell2@gmail.com
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: Correct use of RangeValidator
Posted by Igor Vaynberg <ig...@gmail.com>.
to construct a textfield that works with integer you either have to
pass Integer.class as a constructor arg, or call
setType(Integer.class);
-igor
On Tue, Mar 17, 2009 at 8:21 AM, Wilhelmsen Tor Iver <To...@arrive.no> wrote:
>> WicketMessage: Exception 'java.lang.ClassCastException:
>> java.lang.Integer' occurred during validation
>> org.apache.wicket.validation.validator.RangeValidator on component
>> 2:body:recvAnalisysForm:intField Root
>> cause:java.lang.ClassCastException: java.lang.Integer at
>> java.lang.String.compareTo(String.java:90)
>
> According to the error message, the validator gets a String value here;
> have you checked the actual IModel used by the field? The default Model
> for *TextField uses String IIRC...
>
> IModel<Integer> model = new PropertyModel<Integer>(theBean, "intField");
> RequiredTextField<Integer> intField = new
> RequiredTextField<Integer>("intField", model);
> intField.add(new RangeValidator<Integer>(0, 100));
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
SV: Correct use of RangeValidator
Posted by Wilhelmsen Tor Iver <To...@arrive.no>.
> WicketMessage: Exception 'java.lang.ClassCastException:
> java.lang.Integer' occurred during validation
> org.apache.wicket.validation.validator.RangeValidator on component
> 2:body:recvAnalisysForm:intField Root
> cause:java.lang.ClassCastException: java.lang.Integer at
> java.lang.String.compareTo(String.java:90)
According to the error message, the validator gets a String value here;
have you checked the actual IModel used by the field? The default Model
for *TextField uses String IIRC...
IModel<Integer> model = new PropertyModel<Integer>(theBean, "intField");
RequiredTextField<Integer> intField = new
RequiredTextField<Integer>("intField", model);
intField.add(new RangeValidator<Integer>(0, 100));
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org