[ https://issues.apache.org/jira/browse/WICKET-4441?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14017514#comment-14017514 ]
Jesse Long commented on WICKET-4441: ------------------------------------ Please could we have this fix back-ported to Wicket 6. > PageProvider should create a new Page instance if PageParameters are changed, > even if a stored page exists. > ----------------------------------------------------------------------------------------------------------- > > Key: WICKET-4441 > URL: https://issues.apache.org/jira/browse/WICKET-4441 > Project: Wicket > Issue Type: Bug > Components: wicket > Affects Versions: 1.5.5 > Environment: all platform. > Reporter: Tsutomu YANO > Assignee: Martin Grigorov > Fix For: 7.0.0-M1 > > Attachments: WICKET-4441.patch, fix-WICKET-4441.patch, > pagebug.tar.gz, pagebug2.tar.gz > > > The 'getStoredPage(int)' method returns a stored page instance even if user > changes parameter values encoded into URL, and the PageParameters object of > the stored page instance is never changed. So same page is displayed always > though user changes url on browser manually. > ** HOW TO REPRODUCT ** > 1. unpack the attached sample project 'pagebug.tar.gz'. > 2. mvn jetty:run > 3. access to http://localhost:8080/user/user1 > You will see a form filled with information about user 1. The user's name is > 'user 1', age is 30 and country is 'Japan'. > The mount path of this page is '/user/${userId}'. so 'user1' in the accessed > url is a parameter value. > after accessing to the url, the url will be changed to > http://localhost:8080/user/user1?0 . it contains the page id of the > currently displayed page. > 4. change some values and submit the form. page id will be changed on every > submit. > 5. change only parameter value in url to 'user2'. Never change page-id. > for example, if you now access to http://localhost:8080/user/user1?5, change > the url to http://localhost:8080/user/user2?5 . > 6. This program must display information about user2, because the parameter > value of url is changed. But you will see the information of user 1. Wicket > always display the page of page-id = 5 (even though user changed url > manually). > In this sample program, I use LoadableDetachableModel for retrieving current > parameter-value. But I don't get the new parameter-value because > pageParameters object in a page instance is never changed after the > construction. pageParameters is fixed in the constructor of Page class. > I think that there are no easy way to retrieve parameter-values encoded into > mount-path. Request.getRequestParameters() does not contain parameters > encoded into mount-path. So there are no work-around for this issue. > ** HOW TO FIX THIS ISSUE ** > We must return null from getStoredPage(int) method of PageProvider class, if > current PageParameters is not same with the PageParameters of a stored page. > In current code, getStoredPage(int) checks only if the class of both pages > are same. We must check the PageParameters of both pages. > ** PATCH ** > I attached a pache for PageProvider class. try it. -- This message was sent by Atlassian JIRA (v6.2#6252)