提交表单时,页面将刷新,wicket中的PageParameters将为空
在LoginPage.java中,我添加了一些页面参数,并将用户重定向到另一个页面提交表单时,页面将刷新,wicket中的PageParameters将为空,wicket,wicket-1.6,Wicket,Wicket 1.6,在LoginPage.java中,我添加了一些页面参数,并将用户重定向到另一个页面 PageParameters parameters = new PageParameters(); parameters.add("firstName", firstNameValue); parameters.add("lastName", lastNameValue); parameters.add("emailAddress", emailAddressValue); throw new Redirect
PageParameters parameters = new PageParameters();
parameters.add("firstName", firstNameValue);
parameters.add("lastName", lastNameValue);
parameters.add("emailAddress", emailAddressValue);
throw new RedirectToPageException(UserInformationPage.class, parameters);
此外,informationpage.java
public class UserInformationPage extends BaseWebPage {
private static final long serialVersionUID = 3614392599102678526L;
public UserInformationPage(final PageParameters parameters) {
super(parameters);
setOutputMarkupId(true);
String firstName, lastName, emailAddress;
firstName = parameters.get("firstName").toOptionalString();
lastName = parameters.get("lastName").toOptionalString();
emailAddress = parameters.get("emailAddress").toOptionalString();
WebMarkupContainer userInformationPageWrapper = new WebMarkupContainer("userInformationPageWrapper");
userInformationPageWrapper.add(new UserInformationPanel("userInformationPageContent", firstName, lastName, emailAddress));
add(userInformationPageWrapper.setMarkupId("userInformationPageWrapper"));
}
}
UserInformationPanel.java
public class UserInformationPanel extends Panel {
private static final long serialVersionUID = -1016518626600751985L;
public UserInformationPanel(String id, String idpUuid, firstName, lastName, emailAddress) {
super(id);
setOutputMarkupId(true);
Form<Void> userInformationForm = new CSRFSafeForm<Void>("userInformationForm") {
private static final long serialVersionUID = 2633350725131958527L;
@Override
protected void onConfigure() {
super.onConfigure();
setVisible(true);
}
};
FeedbackPanel errorFeedbackPanel = new TrackedFeedbackPanel("errorFeedback", new ErrorLevelFeedbackMessageFilter(FeedbackMessage.ERROR));
errorFeedbackPanel.setMaxMessages(MAX_ERROR_MESSAGES);
userInformationForm.add(errorFeedbackPanel.setOutputMarkupId(true));
TextField<String> firstName = new TextField<>("firstName", firstName);
firstName.add(StringValidator.maximumLength(DatabaseConstants.User.FIRST_NAME_MAX_LENGTH));
userInformationForm.add(firstName.setRequired(true).setEnabled(true));
TextField<String> lastName = new TextField<>("lastName", lastName));
lastName.add(StringValidator.maximumLength(DatabaseConstants.User.LAST_NAME_MAX_LENGTH));
userInformationForm.add(lastName.setRequired(true).setEnabled(true));
EmailAddressValidator emailAddressValidator = EmailAddressValidator.getInstance();
TextField<String> emailAddress = new EmailTextField("emailAddress", emailAddress), emailAddressValidator);
emailAddress.setRequired(false)
.add(UniqueEmailValidator.getInstance(UniqueEmailValidator.ErrorMsgType.REGISTER))
.add(StringValidator.maximumLength(DatabaseConstants.EMAIL_ADDRESS_MAX_LENGTH));
emailAddress.setEnabled(false);
userInformationForm.add(emailAddress);
userInformationForm.add(new AjaxButton("submitButton") {
private static final long serialVersionUID = -1723378347103997463L;
@Override
public void onSubmit(AjaxRequestTarget target, Form<?> form) {
super.onSubmit(target, form);
Map<String, Object> userAttributes = new LinkedHashMap<>();
userAttributes.put("email_Address", emailAddress);
userAttributes.put("first_Name", firstName);
userAttributes.put("last_Name", lastName);
// logic to save userAttributes in DB.
throw new RedirectToUrlException("/home");
}
@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
super.onError(target, form);
target.add(errorFeedbackPanel);
}
});
userInformationForm.setOutputMarkupId(true);
add(userInformationForm);
}
}
公共类用户信息面板扩展面板{
私有静态最终长serialVersionUID=-1016518626600751985L;
公共用户信息面板(字符串id、字符串idpUuid、名字、姓氏、电子邮件地址){
超级(id);
setOutputMarkupId(真);
Form userInformationForm=新的CSRFSafeForm(“userInformationForm”){
私有静态最终长serialVersionUID=2633350725131958527L;
@凌驾
配置()上受保护的空{
super.onConfigure();
setVisible(真);
}
};
FeedbackPanel errorFeedbackPanel=新的TrackedFeedbackPanel(“errorFeedback”,新的ErrorLevelFeedbackMessageFilter(FeedbackMessage.ERROR));
errorFeedbackPanel.setMaxMessages(最大错误消息);
userInformationForm.add(errorFeedbackPanel.setOutputMarkupId(true));
TextField firstName=新的TextField(“firstName”,firstName);
add(StringValidator.maximumLength(DatabaseConstants.User.FIRST_NAME_MAX_LENGTH));
userInformationForm.add(firstName.setRequired(true).setEnabled(true));
TextField lastName=新的TextField(“lastName”,lastName));
add(StringValidator.maximumLength(DatabaseConstants.User.LAST_NAME_MAX_LENGTH));
userInformationForm.add(lastName.setRequired(true).setEnabled(true));
EmailAddressValidator EmailAddressValidator=EmailAddressValidator.getInstance();
TextField emailAddress=新的EmailTextField(“emailAddress”,emailAddress),emailAddressValidator);
emailAddress.setRequired(false)
.add(UniqueEmailValidator.getInstance(UniqueEmailValidator.ErrorMsgType.REGISTER))
.add(StringValidator.maximumLength(DatabaseConstants.EMAIL_ADDRESS_MAX_LENGTH));
emailAddress.setEnabled(false);
userInformationForm.add(电子邮件地址);
添加(新的AjaxButton(“submitButton”){
私有静态最终长serialVersionUID=-1723378347103997463L;
@凌驾
提交时公共无效(AjaxRequestTarget目标,表单){
super.onSubmit(目标、形式);
Map userAttributes=new LinkedHashMap();
userAttributes.put(“电子邮件地址”,emailAddress);
userAttributes.put(“first_Name”,firstName);
userAttributes.put(“last_Name”,lastName);
//在数据库中保存用户属性的逻辑。
抛出新的重定向Tourlexception(“/home”);
}
@凌驾
受保护的void onError(AjaxRequestTarget目标,表单){
super.onError(目标、形式);
添加(错误反馈面板);
}
});
userInformationForm.setOutputMarkupId(true);
添加(用户信息表单);
}
}
html文件中的按钮,如下所示:
<button wicket:id="submitButton" type="submit" class="adb-button__primary nextStep">
<span><wicket:message key="Submit"/></span>
</button>
第一次成功呈现页面。字段被预先填充。当我第一次单击submit Button时,页面被刷新,页面参数变为空。表单再次呈现,但具有空值。在第二次单击时,它可以正常工作
那么,我如何停止页面刷新,使pageParams不会变为空,并且在第一次单击submit按钮时,它会验证表单并在页面上显示错误(如果有)?我无法添加注释,因此建议使用此答案
请检查此行:
抛出新的重定向Tourlexception(“/home”)
在onSubmit()方法中。你为什么要用它?这意味着每当用户提交表单时,您都会重定向到/home,并且您可能会在家中重定向回登录页面。请检查/回家路线上发生的情况,或发布更多信息,以便我能更好地帮助您 嗨,你能解释一下变量userAttributes的用途吗?我看到您在submitButton#onSubmit中定义并初始化了它,但它似乎没有在其他任何地方使用。在重定向到主页之前,我必须保存userAttributes。我已经更新了代码。如果您使用标准表单而不是CSRFSafeForm,它是否有效?CRSFSafeForm在内部扩展表单。