ICEfaces
  1. ICEfaces
  2. ICE-8278

REGRESSION: ace:tabSet - Component ID has already been found in the view

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 3.1.0.BETA2
    • Fix Version/s: 3.1.0.RC1, 3.1
    • Component/s: ACE-Components
    • Labels:
      None
    • Environment:
      ICEfaces3 Trunk Revision# 29580 (First failed at Revision# 29276 and wasn't failing at Revision# 29275)
      Server: Tomcat6
    • Assignee Priority:
      P1

      Description

      To reproduce:
      1. Build / deploy test app located at: http://server.ice:8888/svn/repo/qa/trunk/Regression-Icefaces2/Sparkle/Nightly/tabset
      2. Navigate to either '/dataStructures/nestedDataTableClient.jsf' or '/dataStructures/tabRepeat2.jsf'

      SEVERE: Error Rendering View[/dataStructures/tabRepeat2.xhtml]
      java.lang.IllegalStateException: Component ID itemTable:clientPaneOne_fixviewstate has already been found in the view.
          at com.sun.faces.util.Util.checkIdUniqueness(Util.java:846)
          at com.sun.faces.util.Util.checkIdUniqueness(Util.java:830)
          at com.sun.faces.util.Util.checkIdUniqueness(Util.java:830)
          at com.sun.faces.util.Util.checkIdUniqueness(Util.java:830)
          at com.sun.faces.util.Util.checkIdUniqueness(Util.java:830)
          at com.sun.faces.util.Util.checkIdUniqueness(Util.java:830)
          at com.sun.faces.application.view.StateManagementStrategyImpl.saveView(StateManagementStrategyImpl.java:144)
          at com.sun.faces.application.StateManagerImpl.saveView(StateManagerImpl.java:133)
          at com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:225)
          at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:419)
          at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
          at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
          at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
          at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
          at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
          at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
          at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
          at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
          at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
          at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
          at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
          at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
          at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
          at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
          at java.lang.Thread.run(Thread.java:619)

        Activity

        Hide
        Ken Fyten added a comment -

        This failure seems to be caused by the commit for "ICE-8168 Refined ICE-8132 fix by rendering JS code that inserts the view state input element only if needed. Also use ID for the wrapping span to minimize the partial update for the first post back.", rvn # 29276.

        Show
        Ken Fyten added a comment - This failure seems to be caused by the commit for "ICE-8168 Refined ICE-8132 fix by rendering JS code that inserts the view state input element only if needed. Also use ID for the wrapping span to minimize the partial update for the first post back.", rvn # 29276.
        Hide
        Mircea Toma added a comment -

        Looks like the TabSet component is reusing the tab's root component. Since the ID assigned to FixViewState.ScriptWriter is created just by appending a suffix to the parent ID we get these duplicate component IDs.

        The fix applied assignes a uniquely generated ID for each FixViewState.ScriptWriter instance.

        Show
        Mircea Toma added a comment - Looks like the TabSet component is reusing the tab's root component. Since the ID assigned to FixViewState.ScriptWriter is created just by appending a suffix to the parent ID we get these duplicate component IDs. The fix applied assignes a uniquely generated ID for each FixViewState.ScriptWriter instance.
        Hide
        Ted Goddard added a comment -

        This appears to be a mojarra bug with uniqueness checking not using visitTree, so is missing ID differences due to iteration.

        <context-param>
        <param-name>com.sun.faces.disableIdUniquenessCheck</param-name>
        <param-value>true</param-value>
        </context-param>

        Show
        Ted Goddard added a comment - This appears to be a mojarra bug with uniqueness checking not using visitTree, so is missing ID differences due to iteration. <context-param> <param-name>com.sun.faces.disableIdUniquenessCheck</param-name> <param-value>true</param-value> </context-param>
        Hide
        Mircea Toma added a comment - - edited

        It looks like the issue is created by the special child component handling that DataTable implements during rendering (more specifically its superclass UIData.setRowIndex method) . I don't pretend to understand how everything works in UIData-DataTable but reverting the last fix for the FixViewState class and wiring it to react to the PostAddToViewEvent instead of PreRenderComponentEvent bypasses the rendering complications of the UIData class.

        Show
        Mircea Toma added a comment - - edited It looks like the issue is created by the special child component handling that DataTable implements during rendering (more specifically its superclass UIData.setRowIndex method) . I don't pretend to understand how everything works in UIData-DataTable but reverting the last fix for the FixViewState class and wiring it to react to the PostAddToViewEvent instead of PreRenderComponentEvent bypasses the rendering complications of the UIData class.

          People

          • Assignee:
            Mircea Toma
            Reporter:
            Cruz Miraback
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: