Я думаю, что вы понимаете правильно.
Я бы сказал, что JSF заполняет большую часть контроллера. Есть и другие библиотеки, которые совместимы с JSF. Например, вы можете использовать Spring WebFlow вместе с JSF для получения более мощных функций навигации.
JSF не очень навязчив, когда дело касается модели. В идеале, в вашей доменной модели не должно быть никаких следов, которые вы используете JSF (исключение состоит в том, что JSF предоставляет аннотации, которые вы можете по желанию использовать, например, @ManagedBean). Это означает, что вы можете использовать любые библиотеки, которые захотите. Вы можете использовать Spring IOC или EJB, если хотите, или можете кодировать всю свою модель в виде простых старых объектов Java.
При этом я хотел бы подчеркнуть, что JSP не устарела. Как указывает digitaljoel, Facelets заменили JSP в качестве технологии просмотра в JSF, но JSP все еще жив и здоров в других средах. Не существует соглашения о том, что JSF, включая Facelets, «лучше», чем JSP (вместе с другим веб-фреймворком); и JSF не стал отраслевым стандартом.
Написание веб-приложения с использованием JSF ближе к написанию настольного приложения, поскольку они отвлекли большую часть обработки запроса-ответа. Не существует конкретного метода, вызываемого каждый раз, когда клиент выполняет запрос, вместо этого каждый запрос проходит через жизненный цикл, который вы не полностью контролируете. Непосредственное взаимодействие с HttpServletRequest не рекомендуется.
Игнорирование характера запроса-ответа в Интернете увеличивает сложность запроса и вступает в противоречие с другой растущей тенденцией: многофункциональные веб-приложения, которые в значительной степени зависят от Javascript. Ответственность за логику представления переносится с сервера на браузер, который взаимодействует с сервером с помощью Ajax против тонких HTTP-API.
Дело в том, что JSF - это не конечная структура, которую нужно изучать и игнорировать все остальное. Это может быть правильным выбором для некоторых приложений, но не для всех.