提交表单时,页面将刷新,wicket中的PageParameters将为空

提交表单时,页面将刷新,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

在LoginPage.java中,我添加了一些页面参数,并将用户重定向到另一个页面

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在内部扩展表单。