我正在尝试登录我的申请。首先,我抛出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和异常抛出。
答案 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);
}
});