2011-11-20 59 views
1

我正在尝试登录到我的应用程序。首先,我扔RestartResponseAtInterceptPageException(这是一个WicketPanel我BasePage的):continueToOriginalDestination不会将我带回原始页面

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

的登录页面类包含在符号的形式(内部私有类),用下面的提交按钮:

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())); 
} 

的签到类获取一个构造函数,显然需要一个网页,我只是设置页与setResponsePage回到那里,我开始没有所有的continueToOriginalDestination和异常抛出。

}); 
+0

尝试实施了'onSubmit'法的形式,而不是在按钮内。 – rotsch

+0

好主意,从来没有想过它。尽管如此,它并没有解决问题。但有了bernies提示,我找到了一个解决方案。谢谢。 – Yashima

回答

6

RestartResponseAtInterceptPageException意在用于在呈现页面时重定向到拦截页面。例如,在页面类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); 
    } 
}); 
+0

感谢您解释异常的实际使用。我曾看到它在这种情况下使用,并认为使用范围更广。但我所做的就是虐待。所以我就停止使用这个异常,并简单地将当前页面作为参数传递给SignUp页面,然后我可以按照建议使用它来设置响应页面。谢谢! – Yashima

相关问题