Kuali Rice Development
  1. Kuali Rice Development
  2. KULRICE-3183

The show/hide tab buttons on the identityManagementRoleInquiry.do page cause the page to crash when Javascript is disabled

    Details

    • Similar issues:
      KULRICE-3235The tabs on the RuleQuickLinks page vanish if they are expanded/collapsed when Javascript is disabled
      KULRICE-9352Show/hide active rows on a collection doesn't work in the inquiry view
      KULRICE-2941When Javascript is disabled, the methodToCall is not always properly discovered.
      KULRICE-9159Show/hide active rows on a collection doesn't work
      KULRICE-3179Document Configuration screen Show/Hide buttons not working correctly
      KULRICE-6804Javascript on document.ready or equivalent for KRAD (sub) Pages, like the Agenda Rule Editor Page.
      KULRICE-3530The "refresh" buttons for namespace code fields on group and role inquiries are visible and cause HTTP 500 errors when JavaScript is disabled
      KULRICE-10641Maintenance document missing show/hide inactive button when collection implements Inactivatable
      KULRICE-9706Create or identify Smoke Test that verifies show/hide inactive lines
      KULRICE-2918The Javascript functions for expanding/collapsing all tabs fail to execute without errors.
    • Rice Team:
      QA
    • Rice Module:
      KNS, KIM

      Description

      When opening up identityManagementRoleInquiry.do by clicking on one of the "Granted to Roles" links on the document configuration page, if Javascript is disabled and one of the show/hide tab buttons is clicked, the result is an HTTP ERROR 500 and a stack trace similar to the following:

      java.lang.RuntimeException: Cannot verify that the methodToCall should be methodToCall.toggleTab.tabOverview.x
      at org.kuali.rice.kns.util.WebUtils.parseMethodToCall(WebUtils.java:122)
      at org.kuali.rice.kns.web.struts.form.KualiForm.populate(KualiForm.java:106)
      at org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase.populate(KualiDocumentFormBase.java:164)
      at org.kuali.rice.kim.web.struts.form.IdentityManagementDocumentFormBase.populate(IdentityManagementDocumentFormBase.java:57)
      at org.kuali.rice.kns.web.struts.action.KualiRequestProcessor.processPopulate(KualiRequestProcessor.java:238)
      at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)
      at org.kuali.rice.kns.web.struts.action.KualiRequestProcessor.process(KualiRequestProcessor.java:91)
      at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
      at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
      at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:491)
      at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1074)
      at org.kuali.rice.kew.web.UserLoginFilter.doFilter(UserLoginFilter.java:92)
      at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1065)
      at org.kuali.rice.kew.web.BootstrapFilterChain.doFilter(BootstrapFilter.java:305)
      at org.kuali.rice.kew.web.DummyLoginFilter.doFilter(DummyLoginFilter.java:88)
      at org.kuali.rice.kew.web.BootstrapFilterChain.doFilter(BootstrapFilter.java:298)
      at org.kuali.rice.kew.web.BootstrapFilter.doFilter(BootstrapFilter.java:166)
      at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1065)
      at org.kuali.rice.kns.web.filter.HideWebInfFilter.doFilter(HideWebInfFilter.java:66)
      at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1065)
      at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
      at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:185)
      at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
      at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:689)
      at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:391)
      at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
      at org.mortbay.jetty.Server.handle(Server.java:285)
      at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:457)
      at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:765)
      at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:628)
      at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:209)
      at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:357)
      at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:217)
      at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)

      However, the expand/collapse all buttons do not cause such an error; it only seems to occur when toggling an individual tab.

        Issue Links

          Activity

          Hide
          Chad Hagstrom added a comment -

          This has been fixed for the KualiDocumentFormBase-related inquiries (person, group, and role) by adding "methodToCall.toggleTab" to the ALWAYS_VALID_PARAMETER_PREFIXES list. However, I did discover another problem on the group and role inquiry pages during my investigation; I'll be creating a new issue to track this problem shortly.

          Show
          Chad Hagstrom added a comment - This has been fixed for the KualiDocumentFormBase-related inquiries (person, group, and role) by adding "methodToCall.toggleTab" to the ALWAYS_VALID_PARAMETER_PREFIXES list. However, I did discover another problem on the group and role inquiry pages during my investigation; I'll be creating a new issue to track this problem shortly.
          Hide
          Garey Taylor added a comment -

          Give ALWAYS_VALID_PARAMETER_PREFIXES work around a try and if it doesn't work, we can go with Jonathan's fix. Thanks for the thorough analysis!

          Show
          Garey Taylor added a comment - Give ALWAYS_VALID_PARAMETER_PREFIXES work around a try and if it doesn't work, we can go with Jonathan's fix. Thanks for the thorough analysis!
          Hide
          Chad Hagstrom added a comment -

          I believe the hack Jonathan mentioned would need to go in IdentityManagementBaseInquiryAction, not IdentityManagementDocumentActionBase, since I'm only noticing this problem on the person/group/role inquiry pages.

          Also, I think another part of the problem is that the person/group/role inquiries use KualiIdentityManagementDocumentFormBase, which is a descendant of KualiDocumentFormBase instead of InquiryForm, meaning that the person/group/role inquiries use the overriden version of the shouldPropertyBePopulatedInForm() method. For instance, the non-person/group/role inquiries return true for this method when checking for the "toggleTab" methodToCall values, because (as can be seen by PojoFormBase's implementation) their strutsActionMappingScope is not "session" and their isNewForm property is always true, so the editable/required property checks are skipped. However, in KualiDocumentFormBase (and hence KualiIdentityManagementDocumentFormBase and its descendants), that particular method is overriden without calling the old one at all, and those two checks from the PojoFormBase's version have been replaced by a webUtils.isDocumentSession check (which returns true in the case of the person/group/role inquries), so the editable/required property checks are performed even though those property lists are empty (hence resulting in the inability to find the "toggleTab"-related methodToCall).

          In that case, what would be the best way to solve this? Add the hack mentioned in Jonathan's post (but to IdentityManagementBaseInquiryAction instead)? Make an addition to the ALWAYS_VALID_PARAMETER_PREFIXES list (used by KualiDocumentFormBase's implementation of shouldPropertyBePopulatedInForm() in its property checks, which is why the expand/collapse all buttons do not suffer from this problem)? Some other approach?

          Show
          Chad Hagstrom added a comment - I believe the hack Jonathan mentioned would need to go in IdentityManagementBaseInquiryAction, not IdentityManagementDocumentActionBase, since I'm only noticing this problem on the person/group/role inquiry pages. Also, I think another part of the problem is that the person/group/role inquiries use KualiIdentityManagementDocumentFormBase, which is a descendant of KualiDocumentFormBase instead of InquiryForm, meaning that the person/group/role inquiries use the overriden version of the shouldPropertyBePopulatedInForm() method. For instance, the non-person/group/role inquiries return true for this method when checking for the "toggleTab" methodToCall values, because (as can be seen by PojoFormBase's implementation) their strutsActionMappingScope is not "session" and their isNewForm property is always true, so the editable/required property checks are skipped. However, in KualiDocumentFormBase (and hence KualiIdentityManagementDocumentFormBase and its descendants), that particular method is overriden without calling the old one at all, and those two checks from the PojoFormBase's version have been replaced by a webUtils.isDocumentSession check (which returns true in the case of the person/group/role inquries), so the editable/required property checks are performed even though those property lists are empty (hence resulting in the inability to find the "toggleTab"-related methodToCall). In that case, what would be the best way to solve this? Add the hack mentioned in Jonathan's post (but to IdentityManagementBaseInquiryAction instead)? Make an addition to the ALWAYS_VALID_PARAMETER_PREFIXES list (used by KualiDocumentFormBase's implementation of shouldPropertyBePopulatedInForm() in its property checks, which is why the expand/collapse all buttons do not suffer from this problem)? Some other approach?
          Hide
          Jonathan Keller added a comment -

          Argh...The hack which allows the other links to work should be in IdentityManagementDocumentActionBase - this methodToCall just needs to be added to the list.

          Show
          Jonathan Keller added a comment - Argh...The hack which allows the other links to work should be in IdentityManagementDocumentActionBase - this methodToCall just needs to be added to the list.

            People

            • Assignee:
              Chad Hagstrom
              Reporter:
              Chad Hagstrom
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Time Tracking

                Estimated:
                Original Estimate - 1 hour, 30 minutes
                1h 30m
                Remaining:
                Remaining Estimate - 1 hour, 30 minutes
                1h 30m
                Logged:
                Time Spent - Not Specified
                Not Specified

                  Structure Helper Panel