You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Martin Grigorov (JIRA)" <ji...@apache.org> on 2014/09/10 14:11:28 UTC

[jira] [Created] (WICKET-5698) WebApplication#unmount() unmounts the whole compound mapper if some of its inner ones matches

Martin Grigorov created WICKET-5698:
---------------------------------------

             Summary: WebApplication#unmount() unmounts the whole compound mapper if some of its inner ones matches
                 Key: WICKET-5698
                 URL: https://issues.apache.org/jira/browse/WICKET-5698
             Project: Wicket
          Issue Type: Bug
          Components: wicket
    Affects Versions: 6.17.0, 7.0.0-M3
            Reporter: Martin Grigorov


>From dev@ mailing lists: http://markmail.org/message/wmdgbrhvrvaeygvr

WebApplication.unmount() calls getRootRequestMapperAsCompound(), and 
calls unmount() on that.

getRootRequestMapperAsCompound() checks if the root request mapper is a 
compound, if not, wraps it in a compound, sets the compound as root and 
returns the compound.

CompoundRequestMapper.unmount() identifies which of the mappers added 
directly to the compound handle the url, and removes them.

The problem:
If the original root mapper was a single wrapper, or layer of wrappers, 
with the actual mounted mapper wrapped some levels down, then the whole 
wrapper is removed, not just the specific MountedMapper that is wrapped. 
This has the effect of removing every single mapper, leaving root mapper 
as an empty compound.

I would like to attempt to provide a patch to fix this, but would like 
guidance on the approach. I have come up with three approaches:

1. Introduce interface IWrappedRequestMapper. This will be an interface 
which has one method: IRequestMapper getWrappedRequestMapper(). We can 
then have all wrapper mappers implement this and work down the tree to 
find the correct MountedMapper (wicket 6) to remove.

2. Have WebApplication hold a reference to a specific 
CompoundRequestMapper, and have all mount()/unmount() operations add and 
remove from this mapper. This compound would need to be added to the 
default list during init. This makes it complicated to work out how to 
do things like have CryptoMapper not apply to mounted pages.

3. Add method unmount() to IRequestMapper, so that wrappers can 
delegate. This obviously can only be done in wicket 7, but we're making 
mounting a problem of every single request mapper, when not even 
Application cares about mounting.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)