从 Wicket 6.23.0 升级到 7.4.0 后,我的 Wicket 页面上的登录功能不再起作用。
我得到一个 PageExpiredException:
14:50:31,772 WARN [RequestCycleExtra] (default task-20) ********************************
14:50:31,773 WARN [RequestCycleExtra] (default task-20) Handling the following exception: org.apache.wicket.protocol.http.PageExpiredException: Bookmarkable page with id 'null' has expired.
14:50:31,774 WARN [RequestCycleExtra] (default task-20) ********************************
登录页面如下所示:
@MountPath("login")
public class LoginPage extends WebPage {
private static final long serialVersionUID = 1L;
public LoginPage() {
}
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.render(JavaScriptReferenceHeaderItem.forReference(JQueryJavaScriptResourceReference.get()));
response.render(JavaScriptReferenceHeaderItem.forReference(JQueryUiJavaScriptResourceReference.get()));
response.render(CssContentHeaderItem.forReference(JQueryUiCssResourceReference.get()));
}
@Override
protected void onInitialize() {
super.onInitialize();
IModel<AuthenticationData> model = new CompoundPropertyModel<>(new AuthenticationData());
add(new FeedbackPanel("feedbackPanel"));
@SuppressWarnings("serial")
StatelessForm<AuthenticationData> form = new StatelessForm<AuthenticationData>("form", model) {
/** {@inheritDoc} */
@Override
protected void onSubmit() {
WebSession session = WebSession.get();
if (session.signIn(getModelObject().getUserName(), getModelObject().getPassword())) {
setResponsePage(getApplication().getHomePage());
} else {
error("Login failed due to invalid credentials");
}
}
};
add(form);
TextField<String> userNameTextField = new TextField<>("userName");
form.add(userNameTextField);
PasswordTextField passwordTextField = new PasswordTextField("password");
form.add(passwordTextField);
SubmitLink submitLink = new SubmitLink("submitLink");
form.add(submitLink);
form.setDefaultButton(submitLink);
}
}
StatelessForm 的 onSubmit 方法永远不会到达。
设置与此处类似:https ://ci.apache.org/projects/wicket/guide/7.x/guide/security.html#security_1