[KULRICE-3183] The show/hide tab buttons on the identityManagementRoleInquiry.do page cause the page to crash when Javascript is disabled Created: 05/Jun/09  Updated: 03/Oct/14  Resolved: 31/Aug/09

Status: Closed
Project: Kuali Rice Development
Component/s: Quality Assurance, User Interface
Affects Version/s: None
Fix Version/s: 1.0.1

Type: Bug Fix Priority: Major
Reporter: Chad Hagstrom Assignee: Chad Hagstrom
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: 1 hour, 30 minutes
Time Spent: Not Specified
Original Estimate: 1 hour, 30 minutes

Issue Links:
discovered KULRICE-3530 The "refresh" buttons for namespace c... Closed
discovered by KULRICE-3179 Document Configuration screen Show/Hi... Closed
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:


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.

Comment by Jonathan Keller [ 18/Aug/09 ]

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

Comment by Chad Hagstrom [ 28/Aug/09 ]

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?

Comment by Garey Taylor [ 31/Aug/09 ]

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!

Comment by Chad Hagstrom [ 31/Aug/09 ]

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.

Generated at Fri Jul 10 17:02:32 CDT 2020 using JIRA 6.1.5#6160-sha1:a61a0fc278117a0da0ec9b89167b8f29b6afdab2.