Okay, this is the preferred way if I would have a link on the page, but I
have not. This is also the way like the DownloadLink works:

        @Override
        public void onClick()
        {
                ...
                getRequestCycle().scheduleRequestHandlerAfterCurrent(
                        new ResourceStreamRequestHandler(resourceStream)
                        {
                                @Override
                                public void respond(IRequestCycle requestCycle)
                                {
                                        super.respond(requestCycle);
                                        if (deleteAfter)
                                        {
                                                Files.remove(file);
                                        }
                                }
                
}.setFileName(fileName).setContentDisposition(ContentDisposition.ATTACHMENT));
        }

But I don't have any Link on the page. Instead the page is used as
"template" and the "onCapture" method of the
CapturingBookmarkablePageRequestTarget was used to sent the email (like the
staticpage example from Wicket 1.4). I thought I should implement an
*IRequestMapper* and an *IRequestHandler* in Wicket 1.5 to achieve the same
and to replace the CodingStrategy and the RequestTarget which are obsolete
in Wicket 1.5.
Would be nice to get this simple example work in Wicket 1.5 too.

EmailPage.java:

public class EmailPage extends WebPage
{
        public EmailPage()
        {
                //
        }
}

EmailPage.html:

<html>
        <head>
                <title>Email Page</title>
        </head>
        <body>
                <p>This is the captured page sent by email.</p>
        </body>
</html>

Sent.java:

public class Sent extends WebPage
{

}

Sent.html:

<html>
        <head>
                <title>Sent Page</title>
        </head>
        <body>
                <p>*The email has been sent!*</p>
                <p>Well, that's if you have a little bit of imagination.  But 
for now the
page has been dumped to stdout.  Sending
                the real email is left as an exercise for the reader.</p>
        </body>
</html>

CapturingBookmarkablePageRequestTarget.java:

public abstract class CapturingBookmarkablePageRequestTarget extends
BookmarkablePageRequestTarget
{
        Class<? extends Page> displayedPageClass;

        public <C extends Page, D extends Page>
CapturingBookmarkablePageRequestTarget(
                Class<C> capturedPageClass, Class<D> displayedPageClass, 
PageParameters
pageParameters)
        {
                super(capturedPageClass, pageParameters);
                this.displayedPageClass = displayedPageClass;
        }

        @Override
        public void respond(RequestCycle requestCycle)
        {
                final StringResponse emailResponse = new StringResponse();
                final WebResponse originalResponse =
(WebResponse)RequestCycle.get().getResponse();
                RequestCycle.get().setResponse(emailResponse);
                super.respond(requestCycle);
                onCapture(emailResponse);
                RequestCycle.get().setResponse(originalResponse);
                RequestCycle.get().setRequestTarget(new
BookmarkablePageRequestTarget(displayedPageClass));
        }

        protected abstract void onCapture(StringResponse emailResponse);
}

CapturingBookmarkablePageRequestTargetUrlCodingStrategy.java:

public class CapturingBookmarkablePageRequestTargetUrlCodingStrategy extends
        BookmarkablePageRequestTargetUrlCodingStrategy
{
        Class<? extends Page> capturedPageClass;
        Class<? extends Page> displayedPageClass;

        public <C extends Page, D extends Page>
CapturingBookmarkablePageRequestTargetUrlCodingStrategy(
                String mountPath, Class<C> capturedPageClass, Class<D> 
displayedPageClass)
        {
                super(mountPath, capturedPageClass, null);
                this.displayedPageClass = displayedPageClass;
                this.capturedPageClass = capturedPageClass;
        }

        @Override
        public IRequestTarget decode(RequestParameters requestParameters)
        {
                return new 
CapturingBookmarkablePageRequestTarget(capturedPageClass,
displayedPageClass)
                {
                        @Override
                        protected void onCapture(StringResponse emailResponse)
                        {
                                // Here send the email instead of dumping it to 
stdout!
                                System.out.println(emailResponse.toString());
                        }
                };
        }
}

Application#init():

// All requests to bookmarkable page "Page" will be captured, and the
// "Sent" page is shown instead
mount(new
CapturingBookmarkablePageRequestTargetUrlCodingStrategy("/capturedpage",
                EmailPage.class, Sent.class));

--
View this message in context: 
http://apache-wicket.1842946.n4.nabble.com/Capture-the-response-of-a-page-request-and-displays-another-page-as-result-tp4039468p4042468.html
Sent from the Users forum mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to