Wicket
  1. Wicket
  2. WICKET-1577

Int based PropertyModel throws convertion error

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Won't Fix
    • Affects Version/s: None
    • Fix Version/s: 1.3.5
    • Component/s: None
    • Labels:
      None
    • Environment:
      Replicated on Windows XP and Mac OS X

      Description

      Setup: Create a radio group that's tied to a propertymodel which is set to '0' by default, e.g.:

      RadioGroup myRadioGroup = new RadioGroup("interval"); // interval is an int property of a bean

      When saving the form one encounters this error:

      org.apache.wicket.util.convert.ConversionException: Can't convert null value to a primitive class: int for setting it on com.evite.event.model.EventSchedule@1b33228[id=<null>]

      at
      org.apache.wicket.util.lang.PropertyResolver$MethodGetAndSet.setValue(Pr
      opertyResolver.java:1079)

      When setting the value to anything else but '0' it doesn't throw this. Also, changing the model type to Integer fixes the issue.

      Suspected bug and this issue was opened per Johan's request.

      1. patch-1577.diff
        3 kB
        Bruno Borges

        Activity

        Hide
        Bruno Borges added a comment -

        If autounboxing is not allowed for null values, why not just avoid calling the setter for primitive properties?

        See
        http://java.sun.com/j2se/1.5.0/docs/guide/language/autoboxing.html

        Anyway, there's a patch attached that does what I suggested.

        Regards,
        Bruno

        Show
        Bruno Borges added a comment - If autounboxing is not allowed for null values, why not just avoid calling the setter for primitive properties? See http://java.sun.com/j2se/1.5.0/docs/guide/language/autoboxing.html Anyway, there's a patch attached that does what I suggested. Regards, Bruno
        Hide
        Bruno Borges added a comment -

        This bug affects 1.4 versions as well.

        Show
        Bruno Borges added a comment - This bug affects 1.4 versions as well.
        Hide
        Johan Compagner added a comment -

        but doing nothing is even more dangerous!
        Then we get complains that wicket doesnt set sometimes a value without reporting that it couldnt
        no i dont want to kill the exception. It is an exception that has to happen.

        Show
        Johan Compagner added a comment - but doing nothing is even more dangerous! Then we get complains that wicket doesnt set sometimes a value without reporting that it couldnt no i dont want to kill the exception. It is an exception that has to happen.
        Hide
        Matej Knopp added a comment -

        What are we supposed to do about this? Swallowing the exception certainly isn't the solution. If you want assign to assign null value, your model object must have Integer property.

        Show
        Matej Knopp added a comment - What are we supposed to do about this? Swallowing the exception certainly isn't the solution. If you want assign to assign null value, your model object must have Integer property.
        Hide
        Bruno Borges added a comment -

        The thing is that if the property is an Integer, the exception is not throw because... is not a primitive type. Just because of that. The property is set with null value.

        Setting an Object property with null value is correct, because of the idea of reseting its value to nothing. But what is the default value for a primitive property? Should we consider default IConverters for that?

        ConverterLocator

        { set(int.class, PrimitiveIntConverter.class); set(boolean.class, PrimitiveBooleanConverter.class); set(char.class, PrimitiveCharConverter.class); }

        And then, the user could set its own primitive converters.

        What about this?

        Show
        Bruno Borges added a comment - The thing is that if the property is an Integer, the exception is not throw because... is not a primitive type. Just because of that. The property is set with null value. Setting an Object property with null value is correct, because of the idea of reseting its value to nothing. But what is the default value for a primitive property? Should we consider default IConverters for that? ConverterLocator { set(int.class, PrimitiveIntConverter.class); set(boolean.class, PrimitiveBooleanConverter.class); set(char.class, PrimitiveCharConverter.class); } And then, the user could set its own primitive converters. What about this?
        Hide
        Igor Vaynberg added a comment -

        we are not going to do anything about this because the current behavior is correct. primitive types do not support null values, so if you want to have null use the equivalent object type. the definition of nullness varies for the primitive types per usecase so a global setting wont help; besides, it is very easy to perform the proper conversion in the imodel where it belongs.

        Show
        Igor Vaynberg added a comment - we are not going to do anything about this because the current behavior is correct. primitive types do not support null values, so if you want to have null use the equivalent object type. the definition of nullness varies for the primitive types per usecase so a global setting wont help; besides, it is very easy to perform the proper conversion in the imodel where it belongs.

          People

          • Assignee:
            Igor Vaynberg
            Reporter:
            Michael Mehrle
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development