Проверка страниц мастера с помощью Spring 3 - PullRequest
4 голосов
/ 18 июля 2011

Я начал исследовать, как создать контроллер для подобной волшебнику формы в Spring, и наткнулся на AbstractWizardFormController, который, как я быстро заметил, устарел.

Затем я выкопал немного дальше и нашел каксделать что-то подобное с Spring 3 .Этот пример не выполняет какой-либо проверки (например, через @Valid), поэтому мне интересно, как можно проверить каждый шаг мастера?

Возможно ли, чтобы каждый шаг имел свою собственную поддержкуОбъект формы, а затем используйте @SessionAttributes для хранения их значений, когда вызывается окончательная отправка (предположительно на последней странице формы)?

Спасибо за любую помощь.

(PS:Решения, которые не требуют WebFlow, были бы идеальными.)

Ответы [ 2 ]

5 голосов
/ 19 июля 2011

Я не знаю, как это осуществить с помощью аннотации @Valid, но вы сможете воспользоваться проверкой JSR-303 для достижения этой цели.В качестве несколько надуманного примера:

public class User {
    @NotNull(message = "First name can't be blank", groups = {Step1.class, FinalStep.class})
    private String firstName;

    @NotNull(message = "Last name can't be blank", groups = {Step1.class, FinalStep.class})
    private String lastName;

    @NotNull(message = "Email can't be blank", groups = {Step1.class, FinalStep.class})
    private String emailAddress;

    @NotNull(message = "Please provide a valid address", groups = {Step2.class, FinalStep.class})
    private Address address;

    // getters/setters...

    public interface Step1 {}
    public interface Step2 {}
    public interface FinalStep {}
}

Вы можете воспользоваться тем, что JSR-303 поддерживает группы проверки, предоставляя интерфейсы маркеров для представления ваших шагов мастера.

Тогда, вместо того чтобы полагатьсяв аннотации @Valid вставьте экземпляр Validator в свой контроллер и вызовите:

validator.validate(user, /*<step interface>.class*/);

в вашем методе processPage (ссылаясь на Controller в связанном вопросе), а затем

validator.validate(user, FinalStep.class);

вваш процессфинишный вызов.

4 голосов
/ 23 марта 2016

Использование @Validated.

Из документации Spring:

Вариант Valid JSR-303, поддерживающий спецификацию групп проверки.Разработан для удобного использования с поддержкой Spring JSR-303, но не для JSR-303.Может использоваться, например, с аргументами методов обработчика Spring MVC.Поддерживается концепцией подсказок валидации SmartValidator, при этом классы групп валидации выступают в качестве объектов подсказок.Может также использоваться с проверкой уровня метода, указывая, что определенный класс должен быть проверен на уровне метода (действуя как pointcut для соответствующего перехватчика валидации), но также может дополнительно указывать группы валидации для проверки уровня метода в аннотированнойучебный класс.Применение этой аннотации на уровне метода позволяет переопределить группы проверки для конкретного метода, но не служит точечным вырезом;аннотация на уровне класса, тем не менее, необходима для запуска валидации метода для конкретного bean-компонента.Может также использоваться в качестве метааннотации к пользовательской аннотации стереотипа или к пользовательской проверенной аннотации для конкретной группы.

...