MyFaces Core
  1. MyFaces Core
  2. MYFACES-1897

escape value of a selectItem is never evaluated

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.2.3
    • Fix Version/s: 1.2.4
    • Component/s: JSR-252
    • Labels:
      None

      Description

      The escape Attribute of a selectItem Component is not evaluated inside a selectOneRadio component.
      The selectItem Component has a escape member, but the member is never used.

      To fix the problem i've done this:

      HtmlRadioRendererBase.renderGroupOrItemRadio() Line ~199 :

      // label element after the input
      boolean componentDisabled = isDisabled(facesContext, selectOne);
      boolean disabled = (componentDisabled || itemDisabled);
      boolean escape = selectItem.isEscape();

      HtmlRendererUtils.renderLabel(writer, selectOne, itemId,
      selectItem.getLabel(), disabled,escape);

      HtmlRendererUtils.renderLabel() Line ~1352:

      public static void renderLabel(ResponseWriter writer, UIComponent
      component, String forClientId,String labelValue, boolean
      disabled) throws IOException {
      renderLabel(writer, component, forClientId, labelValue, disabled, true);
      }

      /**

      • Renders a label HTML element
        */
        public static void renderLabel(ResponseWriter writer, UIComponent
        component, String forClientId,String labelValue, boolean disabled, boolean escape) throws IOException {

      ...

      if ((labelValue != null) && (labelValue.length() > 0)) {
      writer.write(HTML.NBSP_ENTITY);
      if (escape)

      { writer.writeText(labelValue, null); }

      else

      { writer.write(labelValue); }

      }
      ...

      1. myfaces-1897-part1.patch
        5 kB
        Paul Rivera
      2. myfaces-1897-part2.patch
        2 kB
        Paul Rivera
      3. SelectItemEscapeBean.java
        3 kB
        Leonardo Uribe
      4. selectOneManyEscape.jsp
        2 kB
        Leonardo Uribe
      5. selectOneManyEscape-simple.jsp
        2 kB
        Paul Rivera
      6. tomahawk12-HtmlCheckboxRenderer.patch
        1.0 kB
        Paul Rivera
      7. tomahawk12-HtmlRadioRenderer.patch
        0.7 kB
        Paul Rivera

        Activity

        Hide
        Paul Rivera added a comment -

        I've created TOMAHAWK-1314 for the tomahawk patch.

        Show
        Paul Rivera added a comment - I've created TOMAHAWK-1314 for the tomahawk patch.
        Hide
        Leonardo Uribe added a comment -

        Thanks to Paul Rivera for provide us this patch

        Show
        Leonardo Uribe added a comment - Thanks to Paul Rivera for provide us this patch
        Hide
        Leonardo Uribe added a comment -

        Hi

        This issue has been more difficult that it seems at start.

        So UISelectItem has a jsp property name as "escape", but on the component class is "itemEscape". In that case the patch is necessary for now (I also committed the correction on the annotation, but in the future this part should be generated).

        I'll commit a modified solution of your patch, because there still some objections:

        1. javax.faces.model.SelectItem was a new addition on 1.2 (escape property). The documentation says that in any constructor with params without escape defined, this property should be initialized by default as true. It has sense, but right now myfaces core is doing the opposite, so this should be corrected. The issue was never noted because there exists a code like this:

        if (component instanceof EscapeCapable)

        { escape = ((EscapeCapable)component).isEscape(); }

        else

        { escape = RendererUtils.getBooleanAttribute(component, JSFAttr.ESCAPE_ATTR, true); //default is to escape }

        The else part of the if makes escape everything by default.

        2. There are tomahawk components that use the method:

        public static void renderSelectOptions(FacesContext context,
        UIComponent component, Converter converter, Set lookupSet,
        List selectItemList) throws IOException {

        This method contains the previous discussed code. All tomahawk components that use this method implements EscapeCapable interface (and has an escape property for the whole component by default true). But the changes must be done remaining compatibility with this property. Just do this:

        escape = RendererUtils.getBooleanAttribute(component, JSFAttr.ESCAPE_ATTR,
        false);

        does not solve the problem, because if escape="false" for some tomahawk component, by default on SelectItem is true, so the result (do not escape anything) is not get.

        In conclusion the solution should be something like this:

        boolean escape;
        if (component instanceof EscapeCapable)
        {
        escape = ((EscapeCapable)component).isEscape();

        // Preserve tomahawk semantic. If escape=false
        // all items should be non escaped. If escape
        // is true check if selectItem.isEscape() is
        // true and do it.
        // This is done for remain compatibility.
        if (escape && selectItem.isEscape())

        { writer.writeText(selectItem.getLabel(), null); } else
        { writer.write(selectItem.getLabel()); }
        }
        else
        {
        escape = RendererUtils.getBooleanAttribute(component, JSFAttr.ESCAPE_ATTR,
        false);
        //default is to escape
        //In JSF 1.2, when a SelectItem is created by default
        //selectItem.isEscape() returns true (this property
        //is not available on JSF 1.1).
        //so, if we found a escape property on the component
        //set to true, escape every item, but if not
        //check if isEscape() = true first.
        if (escape || selectItem.isEscape())
        { writer.writeText(selectItem.getLabel(), null); }

        else

        { writer.write(selectItem.getLabel()); }

        }

        I'll commit this solution and close this issue right now. But I cannot commit tomahawk patch (it is correct but It is necessary to create another issue on tomahawk project with a reference to this issue). Please create it and I'll commit the patch.

        Show
        Leonardo Uribe added a comment - Hi This issue has been more difficult that it seems at start. So UISelectItem has a jsp property name as "escape", but on the component class is "itemEscape". In that case the patch is necessary for now (I also committed the correction on the annotation, but in the future this part should be generated). I'll commit a modified solution of your patch, because there still some objections: 1. javax.faces.model.SelectItem was a new addition on 1.2 (escape property). The documentation says that in any constructor with params without escape defined, this property should be initialized by default as true. It has sense, but right now myfaces core is doing the opposite, so this should be corrected. The issue was never noted because there exists a code like this: if (component instanceof EscapeCapable) { escape = ((EscapeCapable)component).isEscape(); } else { escape = RendererUtils.getBooleanAttribute(component, JSFAttr.ESCAPE_ATTR, true); //default is to escape } The else part of the if makes escape everything by default. 2. There are tomahawk components that use the method: public static void renderSelectOptions(FacesContext context, UIComponent component, Converter converter, Set lookupSet, List selectItemList) throws IOException { This method contains the previous discussed code. All tomahawk components that use this method implements EscapeCapable interface (and has an escape property for the whole component by default true). But the changes must be done remaining compatibility with this property. Just do this: escape = RendererUtils.getBooleanAttribute(component, JSFAttr.ESCAPE_ATTR, false); does not solve the problem, because if escape="false" for some tomahawk component, by default on SelectItem is true, so the result (do not escape anything) is not get. In conclusion the solution should be something like this: boolean escape; if (component instanceof EscapeCapable) { escape = ((EscapeCapable)component).isEscape(); // Preserve tomahawk semantic. If escape=false // all items should be non escaped. If escape // is true check if selectItem.isEscape() is // true and do it. // This is done for remain compatibility. if (escape && selectItem.isEscape()) { writer.writeText(selectItem.getLabel(), null); } else { writer.write(selectItem.getLabel()); } } else { escape = RendererUtils.getBooleanAttribute(component, JSFAttr.ESCAPE_ATTR, false); //default is to escape //In JSF 1.2, when a SelectItem is created by default //selectItem.isEscape() returns true (this property //is not available on JSF 1.1). //so, if we found a escape property on the component //set to true, escape every item, but if not //check if isEscape() = true first. if (escape || selectItem.isEscape()) { writer.writeText(selectItem.getLabel(), null); } else { writer.write(selectItem.getLabel()); } } I'll commit this solution and close this issue right now. But I cannot commit tomahawk patch (it is correct but It is necessary to create another issue on tomahawk project with a reference to this issue). Please create it and I'll commit the patch.
        Hide
        Paul Rivera added a comment -

        I'll create a new tomahawk jira entry for the tomahawk patches perhaps when we come to an agreement on how to fix the current issue first.

        Show
        Paul Rivera added a comment - I'll create a new tomahawk jira entry for the tomahawk patches perhaps when we come to an agreement on how to fix the current issue first.
        Hide
        Paul Rivera added a comment -

        Hi Leonardo,

        I've uploaded the updated patch in two parts. myfaces-1897-part1.patch will fix the bug in your test scenario. I've done the modifications you've suggested. Instead of modifying the existing HtmlRendererUtils.renderLabel() method, I've created a new one and marked the old one deprecated.

        After applying part1 of the patch, if you try out selectOneManyEscape-simple.jsp, it will still fail. This is because the value of escape in your selectItem jsp tag (like the one below) does not get properly assigned to your UISelectItem.
        <f:selectItem itemLabel="Choose <b>One</b>" itemValue="choose_one" escape="false" />

        The escape property from the tag gets set in the SelectItemTagBase.setProperties():
        setBooleanProperty(component, JSFAttr.ESCAPE_ATTR, _escape, Boolean.TRUE);
        ESCAPE_ATTR's value is "escape". Therefore, SelectItemTagBase.setBooleanProperty() it will try to call UISelectItem.setEscape() which UISelectItem does not have. UISelectItem has setItemEscaped().

        If it doesn't call UISelectItem.setItemEscaped(), UISelectItem._itemEscaped will not have the correct value (defaults to false). So in selectOneManyEscape-simple.jsp, none of them are escaped. Also, in SelectItemsIterator, you have this code snippet:
        boolean escaped = ((UISelectItem) child).isItemEscaped();
        if (label == null)

        { label = itemValue.toString(); }

        item = new SelectItem(itemValue, label, description,
        disabled, escaped);
        escaped will always be false because setItemEscaped() never gets called. So, the newly created SelectItem has an incorrect escaped value.

        I've checked the link you've given me for jsf tlddoc documentation for 1.2_MR1. But this change does not modify any of the tags of selectItem. The 'escape' attribute will be retained. The itemEscaped is only used internally, I think.

        Anyway, if you think that the second part of the patch is unnecessary, then maybe we can proceed with the first one only.

        Show
        Paul Rivera added a comment - Hi Leonardo, I've uploaded the updated patch in two parts. myfaces-1897-part1.patch will fix the bug in your test scenario. I've done the modifications you've suggested. Instead of modifying the existing HtmlRendererUtils.renderLabel() method, I've created a new one and marked the old one deprecated. After applying part1 of the patch, if you try out selectOneManyEscape-simple.jsp, it will still fail. This is because the value of escape in your selectItem jsp tag (like the one below) does not get properly assigned to your UISelectItem. <f:selectItem itemLabel="Choose <b>One</b>" itemValue="choose_one" escape="false" /> The escape property from the tag gets set in the SelectItemTagBase.setProperties(): setBooleanProperty(component, JSFAttr.ESCAPE_ATTR, _escape, Boolean.TRUE); ESCAPE_ATTR's value is "escape". Therefore, SelectItemTagBase.setBooleanProperty() it will try to call UISelectItem.setEscape() which UISelectItem does not have. UISelectItem has setItemEscaped(). If it doesn't call UISelectItem.setItemEscaped(), UISelectItem._itemEscaped will not have the correct value (defaults to false). So in selectOneManyEscape-simple.jsp, none of them are escaped. Also, in SelectItemsIterator, you have this code snippet: boolean escaped = ((UISelectItem) child).isItemEscaped(); if (label == null) { label = itemValue.toString(); } item = new SelectItem(itemValue, label, description, disabled, escaped); escaped will always be false because setItemEscaped() never gets called. So, the newly created SelectItem has an incorrect escaped value. I've checked the link you've given me for jsf tlddoc documentation for 1.2_MR1. But this change does not modify any of the tags of selectItem. The 'escape' attribute will be retained. The itemEscaped is only used internally, I think. Anyway, if you think that the second part of the patch is unnecessary, then maybe we can proceed with the first one only.
        Hide
        Leonardo Uribe added a comment -

        Hi Paul

        I have some suggestions about the patch provided (myfaces-1897-2.patch):

        1. Look jsf tlddoc documentation for 1.2_MR1

        http://java.sun.com/javaee/javaserverfaces/1.2_MR1/docs/tlddocs/

        It is not necessary to modify JSFAttr and SelectItemTagBase, since the code is correct.

        2. There was a recent change on tomahawk core 1.2 class HtmlRadioRenderer that calls renderLabel method, so a new patch including the change on this class is needed. Personally I prefer let the old method and include a new one with escape capability, rather than remove it, (if it is necessary put the old one as deprecated).

        3. Run the test I provided with jsf ri 1.2_09 (it has the correct behavior for all components). I can see the solution but only for two components, not all six.

        Show
        Leonardo Uribe added a comment - Hi Paul I have some suggestions about the patch provided (myfaces-1897-2.patch): 1. Look jsf tlddoc documentation for 1.2_MR1 http://java.sun.com/javaee/javaserverfaces/1.2_MR1/docs/tlddocs/ It is not necessary to modify JSFAttr and SelectItemTagBase, since the code is correct. 2. There was a recent change on tomahawk core 1.2 class HtmlRadioRenderer that calls renderLabel method, so a new patch including the change on this class is needed. Personally I prefer let the old method and include a new one with escape capability, rather than remove it, (if it is necessary put the old one as deprecated). 3. Run the test I provided with jsf ri 1.2_09 (it has the correct behavior for all components). I can see the solution but only for two components, not all six.
        Hide
        Leonardo Uribe added a comment -

        Yes, could you open a new issue on tomahawk, please?. We have also to check the behavior on both tomahawk core and core12, because the renderer classes are a little bit different.

        Show
        Leonardo Uribe added a comment - Yes, could you open a new issue on tomahawk, please?. We have also to check the behavior on both tomahawk core and core12, because the renderer classes are a little bit different.
        Hide
        Paul Rivera added a comment -

        You're right Leonardo, it did introduce bugs to tomahawk12 selectXXX components. I updated the patch to exclude that change.

        I tested the new patch (myfaces-1897-2.patch) with tomahawk selectXXX components and they're working fine now. Although, for the tomahawk12 selectXXX tags, you need to specify escape="false". Otherwise, your selectItems will always be escaped since the value of escape for the tag is true by default.

        I've also attached a patch for tomahawk12-HtmlCheckboxRenderer. t:selectManyCheckbox does not handle escape correctly. This patch fixes that problem. Or should I be opening a new jira entry under TOMAHAWK for this?

        Show
        Paul Rivera added a comment - You're right Leonardo, it did introduce bugs to tomahawk12 selectXXX components. I updated the patch to exclude that change. I tested the new patch (myfaces-1897-2.patch) with tomahawk selectXXX components and they're working fine now. Although, for the tomahawk12 selectXXX tags, you need to specify escape="false". Otherwise, your selectItems will always be escaped since the value of escape for the tag is true by default. I've also attached a patch for tomahawk12-HtmlCheckboxRenderer. t:selectManyCheckbox does not handle escape correctly. This patch fixes that problem. Or should I be opening a new jira entry under TOMAHAWK for this?
        Hide
        Leonardo Uribe added a comment -

        The shared project 3.0.x is used for tomahawk12 and myfaces core12. So one change here affects in the other side and viceversa. At first look, I see that maybe the changes introduce bugs on some related components (t:selectXXX). Specially this part:

        • boolean escape;
        • if (component instanceof EscapeCapable)
          + if(selectItem.isEscape()) { - escape = ((EscapeCapable)component).isEscape(); - }
        • else

        Could you test this if I'm wrong?

        Show
        Leonardo Uribe added a comment - The shared project 3.0.x is used for tomahawk12 and myfaces core12. So one change here affects in the other side and viceversa. At first look, I see that maybe the changes introduce bugs on some related components (t:selectXXX). Specially this part: boolean escape; if (component instanceof EscapeCapable) + if(selectItem.isEscape()) { - escape = ((EscapeCapable)component).isEscape(); - } else Could you test this if I'm wrong?
        Hide
        Paul Rivera added a comment -

        Hi!

        I've attached myfaces-1897.patch that fixes your problem. Here are the details of the fix:

        I) I've modified HtmlRenderUtils.renderLabel to accept the SelectItem parameter. This way, we are passing less parameters and we can get both labelValue and escape values plus any other SelectItem attribute we might need to use inside renderLabel() in the future.
        public static void renderLabel(ResponseWriter writer,
        UIComponent component,
        String forClientId,

        • String labelValue,
          + SelectItem item,
          boolean disabled) throws IOException

        I also modified the part where escape gets evaluated (almost identical to the fix suggested in the first post):

        • if ((labelValue != null) && (labelValue.length() > 0))
          + if ((item.getLabel() != null) && (item.getLabel().length() > 0))
          {
          writer.write(HTML.NBSP_ENTITY);
        • writer.writeText(labelValue, null);
          +
          + if(item.isEscape())
          + { + writer.writeText(item.getLabel(), null); + }

          + else
          +

          { + writer.write(item.getLabel()); + }

          }

        Now, this fix is enough if you are creating your SelectItem objects with its constructor. I.e.:
        new SelectItem("1","<b>Escaped</b>","choose_one",false,true)

        But if you make it using its tag:
        <f:selectItem itemLabel="<b>Escaped</b>" itemValue="choose_one" escape="true" />

        The tag above will be treated as if escape="false". There is a problem with SelectItemTagBase.setProperties(). SelectItemTagBase sets the property of your UISelectItem using UISelectItem.setEscape(). But UISelectItem doesn't have setEscape(). It has setItemEscaped(). Note that UISelectItem.getItemEscaped() returns false by default. Since setItemEscaped() is never called, it will always return false.

        Root cause of this is because in your SelectItemTagBase.setProperties(), this gets called:
        setBooleanProperty(component, JSFAttr.ESCAPE_ATTR, _escape, Boolean.TRUE);

        The value of JSFAttr.ESCAPE_ATTR is 'escape'. If you dig deep into this method, you will notice that it will look for UISelectItem.setEscape() in _ComponentAttributes.put(). Again, UISelectItem does not have a setEscape(), it uses setItemEscaped(). In _ComponentAttributes.put() L299, propertyDescriptor will be null and the value gets added to _attributes instead of calling setComponentProperty().

        To fix this, either:
        A) change JSFAttr.ESCAPE_ATTR from 'escape' to 'itemEscaped'
        CONS: ESCAPE_ATTR is being used by a lot of other classes which expect the value 'escape'.
        B) change UISelectItem's method from isItemEscaped()/setItemEscaped() to isEscape()/setEscape()
        CONS: Breaks API for JSF 1.2.
        C) Add a new JSFAttr.ITEM_ESCAPED_ATTR with the value 'itemEscaped'

        Option C was for me the most logical one. So I've updated SelectItemTagBase.setProperties():

        • setBooleanProperty(component, JSFAttr.ESCAPE_ATTR, _escape, Boolean.TRUE);
          + setBooleanProperty(component, JSFAttr.ITEM_ESCAPED_ATTR, _escape, Boolean.TRUE);

        II) I've updated both HtmlCheckboxRendererBase and HtmlRadioRendererBase that makes calls to HtmlRenderUtils.renderLabel().
        III) To fix selectOneMenu, selectManyMenu, selectOneListbox, and selectManyListbox, I've modified
        HtmlRendererUtils.renderSelectOptions():

        • boolean escape;
        • if (component instanceof EscapeCapable)
          + if(selectItem.isEscape()) { - escape = ((EscapeCapable)component).isEscape(); - }
        • else
        • { - escape = RendererUtils.getBooleanAttribute(component, JSFAttr.ESCAPE_ATTR, - true); //default is to escape - }

          -

        • if (escape || selectItem.isEscape())
        • { writer.writeText(selectItem.getLabel(), null); }

          else
          {
          The original code checks for isEscape() in the component parameter which is can be an HtmlSelectOneMenu, HtmlSelectOneListbox, HtmlSelectManyMenu, HtmlSelectManyListbox -> all of which don't have an 'escape' attribute defined in the TLD. In the JSF 1.2 RI, these components don't have the escape attribute as well.

        So I removed the checking for isEscape() from the component and focused on the isEscape() of the SelectItem instead.

        Show
        Paul Rivera added a comment - Hi! I've attached myfaces-1897.patch that fixes your problem. Here are the details of the fix: I) I've modified HtmlRenderUtils.renderLabel to accept the SelectItem parameter. This way, we are passing less parameters and we can get both labelValue and escape values plus any other SelectItem attribute we might need to use inside renderLabel() in the future. public static void renderLabel(ResponseWriter writer, UIComponent component, String forClientId, String labelValue, + SelectItem item, boolean disabled) throws IOException I also modified the part where escape gets evaluated (almost identical to the fix suggested in the first post): if ((labelValue != null) && (labelValue.length() > 0)) + if ((item.getLabel() != null) && (item.getLabel().length() > 0)) { writer.write(HTML.NBSP_ENTITY); writer.writeText(labelValue, null); + + if(item.isEscape()) + { + writer.writeText(item.getLabel(), null); + } + else + { + writer.write(item.getLabel()); + } } Now, this fix is enough if you are creating your SelectItem objects with its constructor. I.e.: new SelectItem("1","<b>Escaped</b>","choose_one",false,true) But if you make it using its tag: <f:selectItem itemLabel="<b>Escaped</b>" itemValue="choose_one" escape="true" /> The tag above will be treated as if escape="false". There is a problem with SelectItemTagBase.setProperties(). SelectItemTagBase sets the property of your UISelectItem using UISelectItem.setEscape(). But UISelectItem doesn't have setEscape(). It has setItemEscaped(). Note that UISelectItem.getItemEscaped() returns false by default. Since setItemEscaped() is never called, it will always return false. Root cause of this is because in your SelectItemTagBase.setProperties(), this gets called: setBooleanProperty(component, JSFAttr.ESCAPE_ATTR, _escape, Boolean.TRUE); The value of JSFAttr.ESCAPE_ATTR is 'escape'. If you dig deep into this method, you will notice that it will look for UISelectItem.setEscape() in _ComponentAttributes.put(). Again, UISelectItem does not have a setEscape(), it uses setItemEscaped(). In _ComponentAttributes.put() L299, propertyDescriptor will be null and the value gets added to _attributes instead of calling setComponentProperty(). To fix this, either: A) change JSFAttr.ESCAPE_ATTR from 'escape' to 'itemEscaped' CONS: ESCAPE_ATTR is being used by a lot of other classes which expect the value 'escape'. B) change UISelectItem's method from isItemEscaped()/setItemEscaped() to isEscape()/setEscape() CONS: Breaks API for JSF 1.2. C) Add a new JSFAttr.ITEM_ESCAPED_ATTR with the value 'itemEscaped' Option C was for me the most logical one. So I've updated SelectItemTagBase.setProperties(): setBooleanProperty(component, JSFAttr.ESCAPE_ATTR, _escape, Boolean.TRUE); + setBooleanProperty(component, JSFAttr.ITEM_ESCAPED_ATTR, _escape, Boolean.TRUE); II) I've updated both HtmlCheckboxRendererBase and HtmlRadioRendererBase that makes calls to HtmlRenderUtils.renderLabel(). III) To fix selectOneMenu, selectManyMenu, selectOneListbox, and selectManyListbox, I've modified HtmlRendererUtils.renderSelectOptions(): boolean escape; if (component instanceof EscapeCapable) + if(selectItem.isEscape()) { - escape = ((EscapeCapable)component).isEscape(); - } else { - escape = RendererUtils.getBooleanAttribute(component, JSFAttr.ESCAPE_ATTR, - true); //default is to escape - } - if (escape || selectItem.isEscape()) { writer.writeText(selectItem.getLabel(), null); } else { The original code checks for isEscape() in the component parameter which is can be an HtmlSelectOneMenu, HtmlSelectOneListbox, HtmlSelectManyMenu, HtmlSelectManyListbox -> all of which don't have an 'escape' attribute defined in the TLD. In the JSF 1.2 RI, these components don't have the escape attribute as well. So I removed the checking for isEscape() from the component and focused on the isEscape() of the SelectItem instead.
        Hide
        Paul Rivera added a comment -

        patch that fixes:
        HtmlCheckboxRendererBase.java
        HtmlRadioRendererBase.java
        HtmlRendererUtils.java
        JSFAttr.java
        SelectItemTagBase.java

        Show
        Paul Rivera added a comment - patch that fixes: HtmlCheckboxRendererBase.java HtmlRadioRendererBase.java HtmlRendererUtils.java JSFAttr.java SelectItemTagBase.java
        Hide
        Leonardo Uribe added a comment -

        I have added the files necessary for test this feature.

        Show
        Leonardo Uribe added a comment - I have added the files necessary for test this feature.
        Hide
        Leonardo Uribe added a comment -

        After doing some tests, the problem is present on all h:selectXXX components, so a solution for all six components is needed

        Show
        Leonardo Uribe added a comment - After doing some tests, the problem is present on all h:selectXXX components, so a solution for all six components is needed

          People

          • Assignee:
            Leonardo Uribe
            Reporter:
            Jörg Rothbarth
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development