[ 
https://issues.apache.org/jira/browse/WICKET-4441?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Tsutomu YANO updated WICKET-4441:
---------------------------------

    Description: 
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.zip'.
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.




  was:
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.zip'.
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 which fix this issue. try it.




    
> 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
>
> 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.zip'.
> 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 is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to