Uploaded image for project: '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

    • 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.

        Attachments

          Issue Links

            Activity

            Hide
            jkeller 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
            jkeller 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.
            Hide
            chagstrom 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
            chagstrom 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
            gtaylor 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
            gtaylor 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
            chagstrom 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
            chagstrom 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.

              People

              • Assignee:
                chagstrom Chad Hagstrom
                Reporter:
                chagstrom 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