При отправке формы страница обновляется, а PageParameters становится пустым в калитке. - PullRequest
0 голосов
/ 19 октября 2019

В LoginPage.java я добавил некоторые параметры страницы и перенаправил пользователя на другую страницу.

PageParameters parameters = new PageParameters();
parameters.add("firstName", firstNameValue);
parameters.add("lastName", lastNameValue);
parameters.add("emailAddress", emailAddressValue);

throw new RedirectToPageException(UserInformationPage.class, parameters);

В AdditionalInformationPage.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);
    }
}

Кнопка в html-файле выглядит следующим образом:

<button wicket:id="submitButton" type="submit" class="adb-button__primary nextStep">
                    <span><wicket:message key="Submit"/></span>
                </button>

Первая страница отображается успешно. Поля становятся предварительно заполненными. Когда я нажимаю кнопку «Отправить» в первый раз, страница обновляется, а параметры страницы становятся пустыми. Форма отображается снова, но с пустыми значениями. На втором клике все работает правильно.

Итак, как я могу остановить обновление страницы, чтобы pageParams не становился пустым и при первом нажатии кнопки подтверждения, он проверял форму и отображал ошибку, если таковая имеется на странице?

1 Ответ

1 голос
/ 28 октября 2019

Я не могу добавить комментарий, поэтому предлагаю этот ответ.

Пожалуйста, проверьте эту строку: throw new RedirectToUrlException("/home"); внутри метода onSubmit(). Почему ты это используешь? Это означает, что вы перенаправляете на / home всякий раз, когда пользователь отправляет форму, и, вероятно, дома вы перенаправляете обратно на страницу входа. Пожалуйста, проверьте, что происходит на / home маршруте, или опубликуйте больше информации, чтобы я мог помочь вам лучше.

...