对于 Facebook 等服务的身份验证,我们重定向到 Facebook,他们进行身份验证,然后重定向回来。一旦他们重定向回来,我们的代码就会运行,它会做一些事情,然后显示一个响应页面。显示哪个响应页面取决于许多事情。
我们现在做的是:
class RedirectTargetPage extends WebPage {
@Override public void onBeforeRender() {
String getParam = getRequest().getQueryParameters()
.getParamterValue("get-param");
......
if (...) setResponsePage(PageOne.class);
else if (...) setResposnePage(PageTwo.class);
else ... // etc
}
}
然后我们使用urlFor(Class<Page>)
找到该页面的 URL,将其传递给 Facebook,Facebook 在身份验证后重定向回我们,一切正常。
然而,这真的不是一个页面吗?我的意思是它只是位于 URL 后面的一段代码,最后调用setResponsePage
. 在我看来,我所写的只是处理请求的东西,似乎我可以创建一个IRequestHandler
并使用以下内容获取它的 URL urlFor(IRequestHandler)
:
class RedirectTarget implements IRequestHandler {
@Override public void respond(IRequestCycle requestCycle) {
String getParam = requestCycle.getRequest().getQueryParameters()
.getParameterValue("get-param");
....
if (...) requestCycle.setResposnePage(..)
}
}
唉,urlFor(new RedirectTarget())
交付null
!怎么了?我能做些什么?压倒onBeforeReder
一切的作品,但它似乎并不优雅....