ICEfaces
  1. ICEfaces
  2. ICE-10222

mobi:dataView rows selection does not always work

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 4.0
    • Fix Version/s: 4.1.1
    • Component/s: MOBI-Components
    • Labels:
      None
    • Environment:
      ICEfaces4 trunk rev. 42487
      Browsers: IE10/Chrome36/FF31/Safari
      Mobile device: iOS7/iPhone4S
    • Assignee Priority:
      P2

      Description

      QA test app: http://dev.icesoft.com/svn/repo/qa/trunk/Regression-Icefaces4/Sparkle/Manual/dataView

      Test page: http://localhost:8080/dataView/dataViewColumnDynAttribute.jsf

      Using the mobile devices, I cannot select/deselect rows in a consistent way: most of the time, selecting a row shows first the row as being selected, but then it becomes unselected.
      Zooming in on the page appears to fix this issue. This issue is more visible on the iPhone than on the Android device.

        Activity

        Hide
        Carmen Cristurean added a comment -

        Issue still reproducible with ICEfaces4 trunk rev. 43987 (iOS7, iPhone4S), actually rows cannot be selected at all, and zooming in does not resolve the issue.

        Show
        Carmen Cristurean added a comment - Issue still reproducible with ICEfaces4 trunk rev. 43987 (iOS7, iPhone4S), actually rows cannot be selected at all, and zooming in does not resolve the issue.
        Hide
        Liana Munroe added a comment -

        Tested with ICEfaces 4 trunk r44140.
        DataView (all browsers, desktop and mobile)
        iPhone4S: styling is not persisted when selecting rows; they render blue for a fraction of a second, then revert to initial color.
        Desktop/all browsers and android: styling is applied when selecting rows, however it is lost when checking/unchecking the "Manual" checkbox.

        Show
        Liana Munroe added a comment - Tested with ICEfaces 4 trunk r44140. DataView (all browsers, desktop and mobile) iPhone4S: styling is not persisted when selecting rows; they render blue for a fraction of a second, then revert to initial color. Desktop/all browsers and android: styling is applied when selecting rows, however it is lost when checking/unchecking the "Manual" checkbox.
        Hide
        Mircea Toma added a comment -

        Removed 'click' event callback for touch devices to avoid toggling the row selection twice. Now only the 'touchend' callback does the row selection for touch devices.

        Show
        Mircea Toma added a comment - Removed 'click' event callback for touch devices to avoid toggling the row selection twice. Now only the 'touchend' callback does the row selection for touch devices.
        Hide
        Liana Munroe added a comment -

        Several issues still exist with the mobi:dataView application.
        1.) (apple devices) When selecting/desecting a row the screen flickers for a moment a modal layer is applied and removed very quickly. If you tap and hold your finger over a row the modal layer stays in place. Also occurs with showcase ace:dataTable > Selection demo.

        2.) (android/apple/desktop) After selecting a row, then deselecting the manual checkbox in the editing area, the row loses it's selected styling. This is not a new issue.

        3.) (android) After selecting rows several times the application stops responding. This usually requires 10 plus individual row selections.

        Show
        Liana Munroe added a comment - Several issues still exist with the mobi:dataView application. 1.) (apple devices) When selecting/desecting a row the screen flickers for a moment a modal layer is applied and removed very quickly. If you tap and hold your finger over a row the modal layer stays in place. Also occurs with showcase ace:dataTable > Selection demo. 2.) (android/apple/desktop) After selecting a row, then deselecting the manual checkbox in the editing area, the row loses it's selected styling. This is not a new issue. 3.) (android) After selecting rows several times the application stops responding. This usually requires 10 plus individual row selections.
        Hide
        Mircea Toma added a comment -

        3) Ensure that 'activationTimeout' setTimeout identifier is always cleared by placing the cleanup code in a 'finally' block.

        Show
        Mircea Toma added a comment - 3) Ensure that 'activationTimeout' setTimeout identifier is always cleared by placing the cleanup code in a 'finally' block.
        Hide
        Mircea Toma added a comment -

        1) Prevent execution of default action when 'touchend' event is captured to select row. It seems that Safari's default action is to flicker the enclosing form when clicking or touching an inner element.

        Show
        Mircea Toma added a comment - 1) Prevent execution of default action when 'touchend' event is captured to select row. It seems that Safari's default action is to flicker the enclosing form when clicking or touching an inner element.
        Hide
        Mircea Toma added a comment - - edited

        Modified dataView's renderer to render 'ui-state-active' CSS class on the active row. Also added ace:ajax facet to mobi:dataView (in the test case) to enable 'server' mode and thus have the row selection submitted to the server.

        Show
        Mircea Toma added a comment - - edited Modified dataView's renderer to render 'ui-state-active' CSS class on the active row. Also added ace:ajax facet to mobi:dataView (in the test case) to enable 'server' mode and thus have the row selection submitted to the server.
        Hide
        Carmen Cristurean added a comment -

        A NPE occurs when trying to access the dataView demo in showcase, and also the QA test app for dataView > /dataViewColumnDynAttribute.jsf and /dataViewAceTabSet.jsf tests.

        Jan 19, 2016 9:45:43 AM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
        SEVERE: java.lang.NullPointerException
        at org.icefaces.mobi.component.dataview.DataViewRenderer.encodeRows(DataViewRenderer.java:280)
        at org.icefaces.mobi.component.dataview.DataViewRenderer.encodeColumns(DataViewRenderer.java:135)
        at org.icefaces.mobi.component.dataview.DataViewRenderer.encodeChildren(DataViewRenderer.java:79)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:890)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
        at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
        at org.icefaces.impl.renderkit.RendererWrapper.encodeChildren(RendererWrapper.java:41)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:890)
        at org.icefaces.ace.util.Utils.renderChild(Utils.java:67)
        at org.icefaces.ace.util.Utils.renderChildren(Utils.java:53)
        at org.icefaces.mobi.component.viewmanager.ViewRenderer.encodeChildren(ViewRenderer.java:68)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:890)
        at org.icefaces.ace.util.Utils.renderChild(Utils.java:67)
        at org.icefaces.ace.util.Utils.renderChildren(Utils.java:53)
        at org.icefaces.mobi.component.viewmanager.ViewManagerRenderer.encodeChildren(ViewManagerRenderer.java:154)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:890)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
        at org.icefaces.impl.context.DOMPartialViewContext.processPartial(DOMPartialViewContext.java:167)
        at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:219)
        at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:1004)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
        at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:432)
        at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:134)
        at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:744)

        Show
        Carmen Cristurean added a comment - A NPE occurs when trying to access the dataView demo in showcase, and also the QA test app for dataView > /dataViewColumnDynAttribute.jsf and /dataViewAceTabSet.jsf tests. Jan 19, 2016 9:45:43 AM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError SEVERE: java.lang.NullPointerException at org.icefaces.mobi.component.dataview.DataViewRenderer.encodeRows(DataViewRenderer.java:280) at org.icefaces.mobi.component.dataview.DataViewRenderer.encodeColumns(DataViewRenderer.java:135) at org.icefaces.mobi.component.dataview.DataViewRenderer.encodeChildren(DataViewRenderer.java:79) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:890) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) at javax.faces.render.Renderer.encodeChildren(Renderer.java:176) at org.icefaces.impl.renderkit.RendererWrapper.encodeChildren(RendererWrapper.java:41) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:890) at org.icefaces.ace.util.Utils.renderChild(Utils.java:67) at org.icefaces.ace.util.Utils.renderChildren(Utils.java:53) at org.icefaces.mobi.component.viewmanager.ViewRenderer.encodeChildren(ViewRenderer.java:68) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:890) at org.icefaces.ace.util.Utils.renderChild(Utils.java:67) at org.icefaces.ace.util.Utils.renderChildren(Utils.java:53) at org.icefaces.mobi.component.viewmanager.ViewManagerRenderer.encodeChildren(ViewManagerRenderer.java:154) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:890) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) at org.icefaces.impl.context.DOMPartialViewContext.processPartial(DOMPartialViewContext.java:167) at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:219) at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:1004) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:432) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:134) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:659) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744)
        Hide
        Mircea Toma added a comment -

        Added test for null DataView.activeRowIndex in dataView's renderer.

        Show
        Mircea Toma added a comment - Added test for null DataView.activeRowIndex in dataView's renderer.
        Hide
        Carmen Cristurean added a comment - - edited

        ICEfaces4 trunk r46995/ IE11/Chrome, Android 6, iPhone4S/iOS7.2: the server error is no longer seen.
        From the above issues mentioned by Liana, issues 1) and 3) can no longer be reproduced; 2) cannot be tested on iOs.

        New findings:
        1) On QA dataView > /dataViewColumnDynAttribute.jsf: selecting rows works only until a checkbox is deselected (iOS/Android; not an issue on desktop browsers).

        2) On showcase > dataView, the "Manual" checkbox can not be checked/unchecked after selecting a row (mobile devices only, iOS/Android); also, the "Cost" text entry can not be edited (Android only, not an issue on iOS). These issues can also be seen if testing with the dataView QA test app > /dataViewColumnDynAttribute.jsf.

        Show
        Carmen Cristurean added a comment - - edited ICEfaces4 trunk r46995/ IE11/Chrome, Android 6, iPhone4S/iOS7.2: the server error is no longer seen. From the above issues mentioned by Liana, issues 1) and 3) can no longer be reproduced; 2) cannot be tested on iOs. New findings: 1) On QA dataView > /dataViewColumnDynAttribute.jsf: selecting rows works only until a checkbox is deselected (iOS/Android; not an issue on desktop browsers). 2) On showcase > dataView, the "Manual" checkbox can not be checked/unchecked after selecting a row (mobile devices only, iOS/Android); also, the "Cost" text entry can not be edited (Android only, not an issue on iOS). These issues can also be seen if testing with the dataView QA test app > /dataViewColumnDynAttribute.jsf.
        Hide
        Mircea Toma added a comment - - edited

        1) and 2) Applied fix that registers the 'touchend' event handler with the element containing the rows (instead of using component's root element), thus avoiding cancelling 'touchend' events for elements that do not participate in row selection.

        Show
        Mircea Toma added a comment - - edited 1) and 2) Applied fix that registers the 'touchend' event handler with the element containing the rows (instead of using component's root element), thus avoiding cancelling 'touchend' events for elements that do not participate in row selection.
        Hide
        Carmen Cristurean added a comment - - edited

        ICEfaces4 trunk r47002 (desktop/IE11, Chrome47; iOS7/9, Android6):
        1) still seems to be an issue on both iOS and Android; on iOS, selecting rows works until checking/unchecking a checkbox; on Android, rows cannot be selected when first loading the test page, then after unchecking a checbox, rows can be selected in a random way.
        2) is resolved on iOS. On Android, after editing the cost for one row, when selecting another row for editing (by clicking anywhere on the row), the keyboard pops up and the focus returns to the cost input field. This does not happen if after the cost is edited, the user clicks outside the cost text entry.

        Show
        Carmen Cristurean added a comment - - edited ICEfaces4 trunk r47002 (desktop/IE11, Chrome47; iOS7/9, Android6): 1) still seems to be an issue on both iOS and Android; on iOS, selecting rows works until checking/unchecking a checkbox; on Android, rows cannot be selected when first loading the test page, then after unchecking a checbox, rows can be selected in a random way. 2) is resolved on iOS. On Android, after editing the cost for one row, when selecting another row for editing (by clicking anywhere on the row), the keyboard pops up and the focus returns to the cost input field. This does not happen if after the cost is edited, the user clicks outside the cost text entry.
        Hide
        Liana Munroe added a comment -

        Tested with ICEfaces 4 trunk r47037.
        Issue 1 above is resolved (ios, android, desktop) however issue 2 (android) can still be easily reproduced.

        Show
        Liana Munroe added a comment - Tested with ICEfaces 4 trunk r47037. Issue 1 above is resolved (ios, android, desktop) however issue 2 (android) can still be easily reproduced.
        Hide
        Ken Fyten added a comment -

        Re-opened for remaining Android issue.

        Show
        Ken Fyten added a comment - Re-opened for remaining Android issue.
        Hide
        Mircea Toma added a comment -

        Applied fix that removes focus from the any previously used input element (of type 'text', 'number', 'email', 'tel', 'search', 'url', or 'password') to allow row selection without having the keyboard popup.

        Show
        Mircea Toma added a comment - Applied fix that removes focus from the any previously used input element (of type 'text', 'number', 'email', 'tel', 'search', 'url', or 'password') to allow row selection without having the keyboard popup.
        Hide
        Liana Munroe added a comment -

        Verified ICEfaces 4 trunk r47057. Tomcat 8, Android 6.0.1, ios 9.1.

        Show
        Liana Munroe added a comment - Verified ICEfaces 4 trunk r47057. Tomcat 8, Android 6.0.1, ios 9.1.
        Hide
        Carmen Cristurean added a comment - - edited

        Verified Jenkins ICEfaces-4.1.1 Build#1 on iOS7/iPhone4S, iOS9/iPad, desktop/Chrome48.

        Show
        Carmen Cristurean added a comment - - edited Verified Jenkins ICEfaces-4.1.1 Build#1 on iOS7/iPhone4S, iOS9/iPad, desktop/Chrome48.

          People

          • Assignee:
            Mircea Toma
            Reporter:
            Carmen Cristurean
          • Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: