спящий валидатор: проверить совпадение 2 полей

Мне было интересно, я что-то упускаю из виду или валидатор гибернации не предлагает аннотации для проверки равенства двух полей (например, пароля). Я знаю, что могу написать свои собственные валидаторы, но это похоже на стандартную функциональность.


person jack    schedule 10.12.2010    source источник
comment
Пример реализации: git.springsource .org/greenhouse/greenhouse/trees/master/src/   -  person axtavt    schedule 10.12.2010


Ответы (4)


Если вы используете Spring Framework, вы можете использовать для этого Spring Expression Language (SpEL). Я написал небольшую библиотеку, которая предоставляет валидатор JSR-303 на основе SpEL, который очень упрощает межполевые проверки. Взгляните на https://github.com/jirutka/validator-spring.

Это проверит равенство полей пароля, если хотя бы одно из них не пусто.

@SpELAssert(value = "password.equals(passwordVerify)",
            applyIf = "password || passwordVerify",
            message = "{validator.passwords_not_same}")
public class User {

    private String password;
    private String passwordVerify;
}
person Jakub Jirutka    schedule 28.03.2013

Просто пошел по пользовательскому маршруту валидатора. Два других ответа здесь на самом деле не связаны с вопросом. Немного погуглив, я нашел пример fieldmatch.

person jack    schedule 13.12.2010

Hibernate — это ORM Mapper.

Он используется для сохранения данных в БД и их повторного извлечения. Таким образом, наличие 2 полей с одинаковым значением не имеет особого смысла (с точки зрения сохранения). Это то, что вы должны проверить в своей бизнес-логике.

И я с Джунешем... Не сохраняйте свои пароли в восстанавливаемом формате... Поищите Hasing and Salting - Или, что еще лучше, подумайте об openID, чтобы вам не пришлось беспокоить своих клиентов очередным дурацким паролем...

person Heiko Hatzfeld    schedule 10.12.2010
comment
Я использовал тег hibernate, потому что не было тега hibernate-validator, и я пока не могу создавать новые. Конечно, я не сохраняю поле подтверждения. - person jack; 10.12.2010

Я надеюсь, что вы также не сохраняете пароль подтверждения в базе данных. У вас нет готовых проверок для этого, но вместо этого вам придется использовать пользовательскую аннотацию, которая также довольно проста.

person Jinesh Parekh    schedule 10.12.2010
comment
Я использовал тег hibernate, потому что не было тега hibernate-validator, и я пока не могу создавать новые. Конечно, я не сохраняю поле подтверждения. - person jack; 10.12.2010