ICEfaces
  1. ICEfaces
  2. ICE-8385

Support for String global converters

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: EE-3.0.0.GA, 3.1
    • Fix Version/s: EE-3.0.0.GA_P01, 3.2
    • Component/s: Framework
    • Labels:
      None
    • Environment:
      N/A

      Description

      Currently DomBasicRenderer.java class does not support detection of global String converters in an application. It is designed in such way that it always returns a String value before detecting a global custom String converter. (line 205@ DomBasicRenderer.java)

      201 if (converter == null) {
      202 if (currentValue == null) {
      203 return "";
      204 } else if (currentValue instanceof String) {
      205 return (String) currentValue;
      206 }
      207
      208 converter = getConverterForClass(currentValue.getClass());
      209
      210 if (converter == null) {
      211 return currentValue.toString();
      212 }
      213 }

      a fix below is proposed by one of our clients to allow detection of such converters in application:

      ...
      if (converter == null) {
      if (currentValue == null) {
      return "";
      } else if (currentValue instanceof String) {

      // Addition for global String converter detection.

      converter = getConverterForClass(currentValue.getClass());
      if (converter == null) {
      return (String) currentValue;
      } else {
      return converter.getAsString(facesContext, uiComponent, currentValue);
      }
      }

      converter = getConverterForClass(currentValue.getClass());

      if (converter == null) {
      return currentValue.toString();
      }
      }
      ...

      We need to review proposed fix and determine if it can be safely incorporated into our code.

        Activity

        Hide
        Deryk Sinotte added a comment - - edited

        I reviewed the change and the relevant section of the code. It looks reasonable to me. I changed the logic a bit to make it easier to follow and get rid of the repetitive bits:

        197
        198 // look to see whether there is a converter registered with the component
        199 Converter converter = ((ValueHolder) uiComponent).getConverter();
        200
        201 // if there is a converter, then use it
        202 if( converter != null )

        { 203 return converter.getAsString(facesContext, uiComponent, currentValue); 204 }


        205
        206 // if there was no converter registered with the component then
        207 // look for the converter associated with the class of the currentValue
        208 String ret = "";
        209 if (currentValue != null) {
        210 converter = getConverterForClass(currentValue.getClass());
        211 if (converter != null)

        { 212 ret = converter.getAsString(facesContext, uiComponent, currentValue); 213 }

        else

        { 214 ret = currentValue.toString(); 215 }


        216 }
        217 return ret;
        218 }

        I'll await the test case before committing to branch and trunk?

        Show
        Deryk Sinotte added a comment - - edited I reviewed the change and the relevant section of the code. It looks reasonable to me. I changed the logic a bit to make it easier to follow and get rid of the repetitive bits: 197 198 // look to see whether there is a converter registered with the component 199 Converter converter = ((ValueHolder) uiComponent).getConverter(); 200 201 // if there is a converter, then use it 202 if( converter != null ) { 203 return converter.getAsString(facesContext, uiComponent, currentValue); 204 } 205 206 // if there was no converter registered with the component then 207 // look for the converter associated with the class of the currentValue 208 String ret = ""; 209 if (currentValue != null) { 210 converter = getConverterForClass(currentValue.getClass()); 211 if (converter != null) { 212 ret = converter.getAsString(facesContext, uiComponent, currentValue); 213 } else { 214 ret = currentValue.toString(); 215 } 216 } 217 return ret; 218 } I'll await the test case before committing to branch and trunk?
        Hide
        Deryk Sinotte added a comment -

        I've checked the modification into the branch and the main trunk for regression testing. We can either wait for the test case from the customer to exercise the code or we can potentially provide them with a patch or test branch for them to test.

        Show
        Deryk Sinotte added a comment - I've checked the modification into the branch and the main trunk for regression testing. We can either wait for the test case from the customer to exercise the code or we can potentially provide them with a patch or test branch for them to test.

          People

          • Assignee:
            Deryk Sinotte
            Reporter:
            Evgheni Sadovoi
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: