Uploaded image for project: 'MyFaces Core'
  1. MyFaces Core
  2. MYFACES-2739

Pass through String values in EnumConverter.getAsString()

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.0.0
    • 2.0.1
    • JSR-314
    • None

    Description

      From the related spec issue (#817 - https://javaserverfaces-spec-public.dev.java.net/issues/show_bug.cgi?id=817):

      In every standard by-type converter in the JSF spec, except for the
      EnumConverter, the following code is present in getAsString():

      if (value instanceof String)
      {
      return (String) value;
      }

      Thus allowing String values to be used directly as the String representation of
      the type. This allows e.g. the following scenario for an Integer property in the
      managed bean to work, although "1234" beeing a String and not an Integer:

      <h:selectOneRadio value="#

      {myBean.inputInt}

      ">
      <f:selectItem itemValue="1234" />
      </h:selectOneRadio>

      However the spec javadoc of the EnumConverter does not include this scenario and
      thus EnumConverter.getAsString() throws a ConverterException when providing a
      String value. This means that the following scenario won't work, although it
      should on my opinion (note that this currently does work with Mojarra because of
      an implementation issue - see [1] for details):

      <h:selectOneRadio value="#

      {myBean.inputEnum}">
      <f:selectItem itemValue="EnumConstant1" />
      </h:selectOneRadio>

      EnumConstant1 beeing a valid constant in the enum type referenced by
      #{myBean.inputEnum}

      . The only way to make this work right now is to use a
      ValueExpression that resolves to the needed enum constant, so something like this:

      <h:selectOneRadio value="#

      {myBean.inputEnum}

      ">
      <f:selectItem itemValue="#

      {myBean.propertyThatResolvesToEnumConstant1}

      " />
      </h:selectOneRadio>

      This is not very straight forward IMHO, thus I think EnumConverter.getAsString()
      should pass through String-values just as every other standard by-type converter
      does.

      See also the discussion on the MyFaces user mailing list about this [2].

      [1] https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=1694
      [2] http://www.mail-archive.com/users@myfaces.apache.org/msg55742.html

      Attachments

        1. MYFACES-2739.patch
          2 kB
          Jakob Korherr

        Issue Links

          Activity

            People

              jakobkorherr Jakob Korherr
              jakobkorherr Jakob Korherr
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: