Прежде всего, Bean Validation является , а не частью JSF. Это часть Java EE, в которую, в свою очередь, входит и JSF. Bean Validation также можно использовать в приложениях, отличных от JSF. Bean Validation просто разработана для обеспечения стандарта Java EE для сред валидации.
Основное функциональное различие между этими подходами валидации заключается в том, что собственная валидация JSF контролируется на уровне представления, а валидация бина контролируется на уровне модели. Кроме того, есть техническое отличие: проверка бинов не обязательно поддерживается во всех контейнерах. Простые сервлет-контейнеры, такие как Tomcat, например, не поддерживают его. Вам потребуется самостоятельно предоставить API-интерфейс Bean Validation / impl вместе с веб-приложением.
Если вы используете модели, над которыми у вас нет контроля, вам нужно будет принять решение обернуть их в другую модель, чтобы использовать Bean Validation или определить валидацию в представлениях JSF. Что выбрать, зависит от функциональных и технических требований. Оба работают одинаково хорошо.
Если вы используете модели, в которых у вас есть полный контроль, и они также повторно используются для других представлений, кроме JSF, а ограничения валидации полностью зависят от моделей данных базы данных, тогда Bean Validation является лучшим вариантом, чем собственная валидация JSF, поскольку она минимизирует повторение кода в проверочных ограничениях.