continueToOriginalDestination不会让我回到原始页面

时间:2011-11-20 17:00:09

标签: wicket wicket-1.5

我正在尝试登录我的申请。首先,我抛出RestartResponseAtInterceptPageException(这是在我的BasePage上的WicketPanel中):

add(new Link<String>("signin") {
   @Override
   public void onClick() {
       throw new RestartResponseAtInterceptPageException(SignIn.class);
   }
});

SignIn Page类包含登录表单(内部私有类),并带有以下提交按钮:

add(new Button("signinButton") {

    @Override
    public void onSubmit() {
        final User user = model.getObject();
        final boolean result = MySession.get().authenticate(user);
        if (result) {
            if (!continueToOriginalDestination()) {
                setResponsePage(MySession.get().getApplication().getHomePage());
            }
         } else {
            error("Authentication failed");
         }
    }
 });

单击此按钮并且用户成功通过身份验证后,我不会被重定向到我点击signIn链接的页面,而是留在SignIn页面上?我已经尝试过调试这个,但还是找不到出错的地方。

我很高兴有任何提示导致我发现我的方式错误。

顺便说一句,这是wicket 1.5.1。

小更新因为我从答案中得到了我需要的提示,还有一些解释要做。解决方案如下所示:

add(new Link<String>("signin") {
    @Override
    public void onClick() {
         setResponsePage(new SignIn(getPage()));
    }
});

SignIn类获取一个明显占用页面的构造函数,我只需将该页面与setResponsePage一样设置为返回到我开始的地方,而不会抛出任何continueToOriginalDestination和异常抛出。

1 个答案:

答案 0 :(得分:6)

RestartResponseAtInterceptPageException用于在呈现页面时重定向到拦截页面。例如,在Page class ProtectedPage的构造函数中,如果没有用户登录,则为throw new RestartResponseAtInterceptPageException(SignIn.class)。当SignIn页面调用continueToOriginalDestination()时,用户将被带回原始ProtectedPage目的地。

您的使用不是RestartResponseAtInterceptPageException的典型用法,因为您将其放入链接处理程序中。你为什么不直接做setResponsePage(SignIn.class)?如果您确实想要返回单击“登录”链接时所在的确切页面,您还可以尝试将其更改为:

add(new Link<String>("signin") {
   @Override
   public void onClick() {
       setResponsePage(getPage());
       throw new RestartResponseAtInterceptPageException(SignIn.class);
   }
});