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

checkbox and listbox do not handler converters well

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.0.9m9
    • 1.1.2
    • General
    • None

    Description

      lookupSet is filled using either getSubmittedValuesAsSet or getSelectedValuesAsSet. Both of these routines use RenderUtils.internalSubmittedOrSelectedValuesAsSet(), which uses RenderUtils.getConvertedStringValue().
      getConvertedStringValue() always returns strings. Hence, lookupSet.contains() should always compare against itemStrValue (rather than itemValue.)

      This impacts 2 files:

      HtmlCheckboxRendererBase.java:
      168,170c168,173
      < boolean checked = (useSubmittedValues && lookupSet^M
      < .contains(itemStrValue))^M
      < || (!useSubmittedValues && lookupSet.contains(itemValue));^M

      > // boolean checked = (useSubmittedValues && lookupSet^M
      > // .contains(itemStrValue))^M
      > // || (!useSubmittedValues && lookupSet.contains(itemValue));^M
      > // HAN - the myfaces code does not work with a converter. The lookupSet=getS*ValuesAsSet() ultimately calls RenderUtils.internalSubmittedOrSelectedValuesAsSet^M
      > // That routine calls getConvertedStringValue(); which always returns strings. Hence lookupSet should always be compared to itemStrValue.^M
      > boolean checked = lookupSet.contains(itemStrValue);^M

      HtmlRendererUtils.java:
      457,458c460,464
      < if ((useSubmittedValue && lookupSet.contains(itemStrValue))^M
      < || (!useSubmittedValue && lookupSet.contains(itemValue))) {^M

      > // if ((useSubmittedValue && lookupSet.contains(itemStrValue))^M
      > // || (!useSubmittedValue && lookupSet.contains(itemValue))) {^M
      > // HAN - the myfaces code does not work with a converter. The lookupSet=getS*ValuesAsSet() ultimately calls RenderUtils.internalSubmittedOrSelectedValuesAsSet^M
      > // That routine calls getConvertedStringValue(); which always returns strings. Hence lookupSet should always be compared to itemStrValue.^M
      > if (lookupSet.contains(itemStrValue)) {^M

      Attachments

        Issue Links

          Activity

            People

              bruno_dev Bruno Aranda
              han@dhapdigital.com Han Lee
              Votes:
              2 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: