[ 
https://issues.apache.org/jira/browse/WICKET-5068?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13744813#comment-13744813
 ] 

bernard commented on WICKET-5068:
---------------------------------

I am proposing that the very useful concept of the setting 
org.apache.wicket.settings.IPageSettings#getRecreateMountedPagesAfterExpiry() 
is extended to a finer grained component level, covering PageParameters.

More specifically, the default on page level should be inherited from the 
global setting above to be effective. This should be overridable on component 
level. In the case of a boolean true value, this means that a stateful page, 
e.g. stateful because of some trivial AJAX behavior like an auto-complete 
field, can be recreated as required unless the page class overrides this 
default with false.

Then it gets more interesting:

Descending the component hierarchy below Page level the default for behavior 
invocation should be false, but each component should be able to choose whether 
to override this with true, whether it is stateless or not. Components below 
page level that are target of such parameters would by default not receive them 
unless they choose to do so.

I am proposing a method name

public boolean canBehaveAfterExpiry()

The return value is NOT propagated down the component hierarchy.

I think that this scheme simplifies things quite a bit. In the most trivial 
case, it would allow a logout link on a stateful page to execute its behavior. 
Which is currently prevented even for a stateless link in 
ListenerInterfaceRequestHandler#respond() because it makes a very expensive 
effort to search all components in the page to find stateful ones and if it 
does then it skips execution. This goes as far as invoking any of the page life 
cycle methods e.g. onBeforeRender() to detect stateful components added to the 
page late.

This scheme from my limited perspective seems to be logically clean because it 
works on component level.

I have had to code some messy page constructors that detect the expiry 
situation and do not add the AJAX components to the page at all just to get the 
link behaviors executed by fooling ListenerInterfaceRequestHandler#respond(). 
With this I want to say that sometimes Wicket tries to protect us from things 
that we know will never happen - in this case the page does not even need to be 
rendered.

                
> PageParameters missing from re-created Page
> -------------------------------------------
>
>                 Key: WICKET-5068
>                 URL: https://issues.apache.org/jira/browse/WICKET-5068
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 6.4.0
>         Environment: All
>            Reporter: bernard
>         Attachments: wicket-5068.patch
>
>
> WICKET-4594 removes existing PageParameters when re-creating an expired page.
> It does this under the assumption that the parameters are not needed for 
> callback behavior that must not be executed after expiry.
> However PageParameters are needed even without execution of callback behavior.
> In trivial cases, a page cannot be re-constructed successfully without 
> PageParameters e.g. a view page for a customer order needs the order ID from 
> its PageParameters.
> There is a bit of an irony about this. To improve the recovery behavior, i.e. 
> to avoid the dreaded PageExpiryException, one needs to create some client 
> state which is then lost on re-creation after expiry.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to