При проверке на стороне клиента именно клиент (веб-браузер) проверяет ввод с помощью языка на стороне клиента, например, JavaScript. При проверке на стороне сервера именно сервер (веб-сервер) проверяет ввод с помощью языка на стороне сервера, например, Джава.
Вы никогда не должны выполнять только проверку на стороне клиента, потому что конечный пользователь может контролировать (и, следовательно, взламывать / подделывать) результат. Обычно вы хотели бы использовать проверку на стороне клиента, потому что она дает гораздо более раннюю обратную связь. Конечный пользователь не должен ждать завершения отправки формы и не должен сталкиваться с «вспышкой содержимого» (страница отключается, а затем снова отображается с новым содержимым). Вы хотите использовать проверку на стороне сервера для обеспечения целостности представленных данных. Конечный пользователь никоим образом не контролирует результаты проверки на стороне сервера.
В случае JSF проверка выполняется всегда на стороне сервера. Начиная с JSF 2.0 можно отправлять форму (и, следовательно, также проверять форму), используя встроенную функциональность Ajaxical. Это сочетает в себе лучшее из двух миров: наличие мгновенной обратной связи без флэш-содержимого и надежность / целостность проверки на стороне сервера.