[
https://issues.apache.org/jira/browse/WICKET-3551?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13010827#comment-13010827
]
Matt Brictson commented on WICKET-3551:
---------------------------------------
Some further thoughts on this issue:
1. The automatic redirect policy in Wicket 1.5 in general is a good thing. But
it is undesirable in this exceptional case. Is there an easy way to disable it
for my error pages only, without writing a custom PageRenderer? Perhaps a flag
I could override on the Page itself? (E.g. disable redirect if
Page.isErrorPage()==true?)
2. I think there is a subtle bug in how Wicket calculates relative paths that
has been uncovered in this exceptional case. My understanding is that when a
request yields a 404 error, the servlet container forwards the original request
to the path defined in the <error-page> declaration. This forwarded request is
handled by Wicket, and the relative paths are calculated by Wicket based on the
forwarded path. But the user's browser URL still shows the original path.
Wicket needs to be aware that the request was forwarded and unwrap it to get
the path of the original request in order to calculate the proper relative
paths.
Perhaps serving <error-page> via Wicket is too problematic and should be
discouraged? Do you think I going against the grain of the framework by
attempting this?
> Using web.xml <error-page> to render error pages via Wicket yields undesired
> behavior in Wicket 1.5
> ---------------------------------------------------------------------------------------------------
>
> Key: WICKET-3551
> URL: https://issues.apache.org/jira/browse/WICKET-3551
> Project: Wicket
> Issue Type: Bug
> Components: wicket-core
> Affects Versions: 1.5-RC2
> Reporter: Matt Brictson
> Attachments: WICKET-3551-wicket-1.4.tgz,
> WICKET-3551-wicket-1.5-RC2.tgz
>
>
> In my applications I prefer to use Wicket to render all error pages,
> including my 404 "not found" page. This allows me to reuse a shared page
> template afforded by Wicket to create my error pages (i.e. by extending a
> BasePage), rather than using copy and paste to maintain static error page
> HTML files.
> I have been doing this as follows:
> web.xml:
> <error-page>
> <error-code>404</error-code>
> <location>/error/404</location>
> </error-page>
> Now, so long as I have an appropriate bookmarkable page mounted on the
> "/error/404" path, the servlet container will render my page whenever a 404
> "not found" scenario is encountered.
> This works great in Wicket 1.4.x.
> However in Wicket 1.5 (RC2 and the latest SNAPSHOT as of this writing), two
> problems occur:
> 1. By default, Wicket 1.5 automatically performs a 302 redirect before
> rendering the error page. This changes the URL from the invalid one (i.e. the
> one that generated the 404) to the mounted path (/error/404 in this example).
> This is not the desired behavior for a 404 error page; the original URL
> requested by the user should be maintained.
> 2. If I attempt to work around the issue by overriding
> WebPageRenderer.enableRedirectForStatelessPage() to return false, the problem
> gets worse. Now the URL doesn't change, which is good. But Wicket gets
> confused about the depth of the request URL path: it seems to calculate
> relative URLs based on the mounted path rather than the URL that was
> requested. This causes all relative resources on the page (e.g. stylesheet
> references) to be miscalculated and break.
> I will attach two quickstarts: one showing this configuration working in 1.4,
> and another showing the same setup failing as described above in 1.5-RC2.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira