Ответ 1
При использовании NavigationHandler#handleNavigation()
вы зависите от реализованных обработчиков навигации. Вы или сторонняя организация можете легко переопределить/предоставить это в webapp. Это может быть выгодным, если вы хотите более мелкозернистый контроль, но это может быть неблагоприятным, если вы вообще не хотите иметь внешние контролируемые влияния. Использование определенных URL-адресов и/или параметров может привести к другому поведению навигации.
ExternalContext#redirect()
делегирует под обложки сразу HttpServletResponse#sendRedirect()
, без привлечения какого-либо навигационного обработчика. Это может быть преимуществом, когда использование обработчика навигации потенциально невыгодно. Но недостатком является то, что он не обрабатывает скрытую навигацию и не учитывает определенные навигационные случаи.
В целом, это зависит:) Если вы просто хотите перенаправлять полноценное и точечное, используйте ExternalContext#redirect()
. Если вы хотите перейти по результату вместо URL-адреса, используйте NavigationHandler#handleNavigation()
.