ICEfaces
  1. ICEfaces
  2. ICE-7809

UISeriesBase uses Mojarra-specific setDataModel() incompatible with MyFaces

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: EE-3.0.0.BETA
    • Fix Version/s: 3.0.1, EE-3.0.0.GA
    • Component/s: ICE-Components
    • Labels:
      None
    • Environment:
      n/a

      Description

      The UISeriesBase which the ICEfaces HtmlDataTable and UISeries inherit from, uses the following code which appears to be Mojarra-specific:

      if (isNestedWithinUIData()) {
            setDataModel(null);
      }

      setDataModel() appears to be called if the component is nested within another UIData component. When run with MyFaces (tested with 2.1.6), the following error is generated:

      <error>
          <error-name>java.lang.UnsupportedOperationException</error-name>
          <error-message><![CDATA[this method is here only to maintain binary compatibility w/ the RI]]></error-message>
      </error>

      This error appears to originate from the MyFaces UIData component:

      protected void setDataModel(DataModel dataModel){
              throw new UnsupportedOperationException("this method is here only to maintain binary compatibility w/ the RI");
      }

       

        Issue Links

          Activity

          Philip Breau created issue -
          Philip Breau made changes -
          Field Original Value New Value
          Assignee Ken Fyten [ ken.fyten ]
          Philip Breau made changes -
          Link This issue blocks IPCK-360 [ IPCK-360 ]
          Philip Breau made changes -
          Link This issue blocks IPCK-362 [ IPCK-362 ]
          Ken Fyten made changes -
          Salesforce Case []
          Fix Version/s EE-3.0.0.GA [ 10262 ]
          Assignee Priority P1
          Assignee Ken Fyten [ ken.fyten ] Mark Collette [ mark.collette ]
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #28144 Fri Mar 02 23:58:40 MST 2012 mark.collette ICE-7809 : UISeriesBase uses Mojarra-specific setDataModel() incompatible with MyFaces
          Files Changed
          Commit graph MODIFY /icefaces3/trunk/icefaces/core/src/main/java/org/icefaces/impl/component/UISeriesBase.java
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #28145 Sat Mar 03 00:10:45 MST 2012 mark.collette ICE-7809 : UISeriesBase uses Mojarra-specific setDataModel() incompatible with MyFaces
          Files Changed
          Commit graph MODIFY /icefaces3/branches/icefaces-3.0.x-maintenance/icefaces/core/src/main/java/org/icefaces/impl/component/UISeriesBase.java
          Hide
          Mark Collette added a comment -

          Reproduced by add an h:commandButton into the ice:columns component in the showcase ice:columns example, so that the h:commandButton showed in every cell of the dataTable. Clicking on the h:commandButton resulted in a server error popup with little information, with nothing in the server log. Use of Firebug to examine the POST response showed the exception type and message.

          Inspection of UISeriesBase.java source code showed that setDataModel(DataModel) was only used in one place, as every other set/null of the DataModel was through the local dataModel field, which supercedes the super-class' DataModel. Likely the sole setDataModel(DataModel) use, introduced by ICE-7142, was an ommission of converting to use of the local field. For some reason, while UISeriesBase.getDataModel() is overridden to use the local field, setDataModel was not overridden at all. So to fix this, I normalised on accessing the local field, and added the local setter, to avoid affecting the unused super-class state.

          icefaces3 trunk
          Subversion 28144

          icefaces-3.0.x-maintenance
          Subversion 28145

          Show
          Mark Collette added a comment - Reproduced by add an h:commandButton into the ice:columns component in the showcase ice:columns example, so that the h:commandButton showed in every cell of the dataTable. Clicking on the h:commandButton resulted in a server error popup with little information, with nothing in the server log. Use of Firebug to examine the POST response showed the exception type and message. Inspection of UISeriesBase.java source code showed that setDataModel(DataModel) was only used in one place, as every other set/null of the DataModel was through the local dataModel field, which supercedes the super-class' DataModel. Likely the sole setDataModel(DataModel) use, introduced by ICE-7142 , was an ommission of converting to use of the local field. For some reason, while UISeriesBase.getDataModel() is overridden to use the local field, setDataModel was not overridden at all. So to fix this, I normalised on accessing the local field, and added the local setter, to avoid affecting the unused super-class state. icefaces3 trunk Subversion 28144 icefaces-3.0.x-maintenance Subversion 28145
          Mark Collette made changes -
          Status Open [ 1 ] Resolved [ 5 ]
          Resolution Fixed [ 1 ]
          Ken Fyten made changes -
          Salesforce Case []
          Fix Version/s 3.0.1 [ 10282 ]
          Ken Fyten made changes -
          Status Resolved [ 5 ] Closed [ 6 ]
          Assignee Priority P1

            People

            • Assignee:
              Mark Collette
              Reporter:
              Philip Breau
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: