对于使用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后面的一段代码,该URL最后称为setResponsePage。在我看来,我正在写的只是处理请求的东西,似乎我可以创建一个IRequestHandler,然后使用 urlFor(IRequestHandler) 来获取指向它的URL,如下所示:
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可以工作,但是看起来并不优雅。

最佳答案

虽然您可以根据现在用来定义将使用哪个重定向页面的相同条件加载不同的组件来使RedirectTargetPage成为页面,但您也应该也可以使用IRequesthandler

从JavaDoc:

返回请求处理程序的呈现URL;如果返回,则返回null
处理程序无法呈现。

看来您的处理程序由于某种原因而无法渲染。您是否已遍历urlFor以查看错误所在?

10-07 17:59