powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сравнение двух полей формы Spring
3 сообщений из 3, страница 1 из 1
Сравнение двух полей формы Spring
    #39290691
sklyanka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем здравствуйте!
У меня такой вопрос. Как лучше сделать сравнение полей формы (пароли)?
У меня есть класс Account, который соответствует таблице в бд. Собственно говоря, вся валидация задана здесь - при помощи аннотаций к полям.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
@Entity
@Table
@SequenceGenerator(name = "account_seq", sequenceName = "SEQ_ACCOUNT" )
public class Account  {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "account_seq")
    private Long id;

    @NotEmpty
    @Size(max = 50)
    private String firstName;

    @NotEmpty
    @Size(max = 50)
    private String lastName;

    @NotEmpty
    @Size(max = 100)
    @Unique(entity=Account.class, property = "login")
    private String login;

    @NotEmpty
    @Size(max = 20)
    private String password;
    

    @Size(max = 20)
    private String phone;

    private int status;

    @Temporal(TemporalType.DATE)
    private Date creationDate;

    @Temporal(TemporalType.DATE)
    private Date deleteDate;

    @Size(max = 30)
    private String authority;


    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Date getCreationDate() {
        return creationDate;
    }

    public void setCreationDate(Date creationDate) {
        this.creationDate = creationDate;
    }

    public Date getDeleteDate() {
        return deleteDate;
    }

    public void setDeleteDate(Date deleteDate) {
        this.deleteDate = deleteDate;
    }

    public String getAuthority() {
        return authority;
    }

    public void setAuthority(String authority) {
        this.authority = authority;
    }
}



Добавляя в форму регистрации два инпута с одинаковым path = "password", я вижу, что по нажатию на submit пароль в бд записывается как значения этих инпутов через запятую. Т.е. если я в один инпут пишу 123, а в другой qwe, то пароль пользователя станет 123,qwe. Почему-то js функция (сравнивает по id) не срабатывает.
И с вариантом написания своей аннотации дела плохи: не могу добавить новое поле, т.к. а таблице его нет.

Пожалуйста, помогите!
Буду рада любой подсказке.
...
Рейтинг: 0 / 0
Сравнение двух полей формы Spring
    #39290694
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sklyanka,

1) Чтобы филд не попал в базу на него навешивают аннотацию @Transient, таким образом у вас будет одно поле password которое уйдет в базу, и confirm которое нужно только для валидации
2) Как сделать кросс валидацию полей тут два варианта, или реализовать ее вне класса Энтити(в контроллере, сервисе, дао ну где угодно в общем) или 2 - написать кастомный class-level валидатор, и повесить его на вашу энтити, детали можете посмотреть здесь - http://stackoverflow.com/questions/1972933/cross-field-validation-with-hibernate-validator-jsr-303
...
Рейтинг: 0 / 0
Сравнение двух полей формы Spring
    #39290775
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый День .

1) откажитесь от ентити на клиенте - не нужно их тянуть с формы клента в базу ...
Для этого есть специально разработканная схема работы с формами

Вам нужен pojo класс для полей формы .
https://spring.io/guides/gs/validating-form-input/

далее в контроллере вы делаете валидацию всех полей

Код: java
1.
2.
3.
4.
5.
@Valid PersonForm personForm, BindingResult bindingResult) {

        if (bindingResult.hasErrors()) {
            return "form";
        }




В Классе PersonForm

Вы добавляете метод

с аннотацией


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
    @AssertTrue(message = "введенные пароли не совпадают !") 
    public boolean isValidPasswords() {
        boolean result = true;
        //если есть то условия должны выполниться 
        if (password != null &&  password1 != null  && password  equals password1 ) {
            return true;
        }
       return false;
    }



Этого вам должно хватить

отдельный вопрос как перевести сообщение в @AssertTrue(message = "введенные пароли не совпадают !")
для i18n под все локали ????



Если валидация значений с формы прошла - то вы переносите их в БД (парекладываете в ентити)


Если нет - то нужно вернуться на форму и показать ошибки что где неверно ...

для этого есть механизм

RedirectAttributes redirectAttrs
Код: java
1.
2.
        if (bindingResult.hasErrors()) {
            redirectAttrs.addFlashAttribute("errorMessage",     bindingResult.getFieldErrors().stream().map(FieldError::getDefaultMessage).collect(joining(", ")));




И Да - дополнительно валидируете форму на клиенте через jquery | bootstrap или что там у вас .
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Сравнение двух полей формы Spring
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]