Example usage for org.apache.wicket.core.request.handler PageProvider hasPageInstance

List of usage examples for org.apache.wicket.core.request.handler PageProvider hasPageInstance

Introduction

In this page you can find the example usage for org.apache.wicket.core.request.handler PageProvider hasPageInstance.

Prototype

@Override
public final boolean hasPageInstance() 

Source Link

Document

If this provider returns existing page, regardless if it was already created by PageProvider itself or is or can be found in the data store.

Usage

From source file:de.micromata.wicket.request.mapper.PageParameterAwareMountedMapper.java

License:Open Source License

@Override
protected IRequestHandler processHybrid(PageInfo pageInfo, Class<? extends IRequestablePage> pageClass,
        PageParameters pageParameters, Integer renderCount) {
    IRequestHandler handler = null;//from  w  w  w .  j a  v  a 2s.  c om
    try {
        handler = super.processHybrid(pageInfo, pageClass, pageParameters, renderCount);
    } catch (PageExpiredException e) {
        // in case of pageExpiredException at this point, we just redirect to previous bookmarkable resource
        return processBookmarkable(pageClass, pageParameters);
    }
    if (handler != null && handler instanceof RenderPageRequestHandler) {
        // in the current implementation (wicket 1.5.6) super.processHybrid
        // returns a RenderPageRequestHandler
        RenderPageRequestHandler renderPageHandler = (RenderPageRequestHandler) handler;
        if (renderPageHandler.getPageProvider() instanceof PageProvider) {
            PageProvider provider = (PageProvider) renderPageHandler.getPageProvider();
            // This check is necessary to prevent a RestartResponseAtInterceptPageException at the wrong time in request cycle
            if (provider.hasPageInstance()) {
                // get page classes
                Class<? extends IRequestablePage> oldPageClass = renderPageHandler.getPageClass();
                Class<? extends IRequestablePage> newPageClass = renderPageHandler.getPageProvider()
                        .getPageClass();

                // get page parameters
                PageParameters newPageParameters = renderPageHandler.getPageParameters();
                PageParameters oldPageParameters = renderPageHandler.getPageProvider().getPageInstance()
                        .getPageParameters();

                if (oldPageClass != null && oldPageClass.equals(newPageClass) == false) {
                    return processBookmarkable(newPageClass, newPageParameters);
                }

                // if we recognize a change between the page parameter of the loaded
                // page and the page parameter of the current request, we redirect
                // to a fresh bookmarkable instance of that page.
                if (!PageParameters.equals(oldPageParameters, newPageParameters)) {
                    return processBookmarkable(newPageClass, newPageParameters);
                }
            }
        }
    }
    return handler;
}