[ https://issues.apache.org/jira/browse/WICKET-1732?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Martin Grigorov resolved WICKET-1732. ------------------------------------- Resolution: Fixed Fix Version/s: 1.5-M4 Improved with r1053071. > FormTester's DropDownChoice onSelectionChanged() behaviour doesn't reload page > ------------------------------------------------------------------------------ > > Key: WICKET-1732 > URL: https://issues.apache.org/jira/browse/WICKET-1732 > Project: Wicket > Issue Type: Bug > Components: wicket > Affects Versions: 1.3.0-final, 1.3.3 > Reporter: David Shepherdson > Assignee: Martin Grigorov > Priority: Minor > Fix For: 1.5-M4 > > > When a DropDownChoice's onSelectionChanged() notification is sent from a > browser, it causes the whole page to be reloaded/redisplayed (because the > form is submitted). However, when the same notification is sent through the > FormTester, it doesn't submit the form and therefore other components on the > page may not be updated/redisplayed. > We're working around this by overriding FormTester's select() method so that > it submits the form as follows: > @Override > public void select(String formComponentId, int index) { > super.select(formComponentId, index); > > // Workaround for Wicket FormTester bug: selection changed > notifications cause the page > // to be reloaded in a real browser, but they don't when using the > Wicket tester. > FormComponent component = > (FormComponent)getForm().get(formComponentId); > if (component instanceof DropDownChoice) { > try > { > Method wantOnSelectionChangedNotificationsMethod = > DropDownChoice.class.getDeclaredMethod("wantOnSelectionChangedNotifications", > new Class[0]); > wantOnSelectionChangedNotificationsMethod.setAccessible(true); > boolean wantOnSelectionChangedNotifications = > ((Boolean)wantOnSelectionChangedNotificationsMethod.invoke(component, new > Object[0])).booleanValue(); > if (wantOnSelectionChangedNotifications) { > // Notification method call has already been made by > super, > // but we want to trigger the page load, as would happen > in a real browser. > > // First, use reflection to get the form's hidden field > id. > Method getHiddenFieldIdMethod = > Form.class.getDeclaredMethod("getHiddenFieldId"); > getHiddenFieldIdMethod.setAccessible(true); > String hiddenFieldId = (String) > getHiddenFieldIdMethod.invoke(getForm()); > > // Now set the parameter in the form > // to cause it to call the callback when submitted. > m_wicketTester.getServletRequest().setParameter( > hiddenFieldId, > component.urlFor(IOnChangeListener.INTERFACE).toString()); > > // And finally submit the form. > submit(); > > } > } > catch (Exception e) > { > throw new RuntimeException(e); > } > } > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.