HttpServletResponse objHttpServletResponse = (HttpServletResponse)
FacesContext.getCurrentInstance()
.getExternalContext()
.getResponse();
objHttpServletResponse.sendRedirect("Restricted/Home.jsf");
Здесь вы выходите из API JSF и переходите к API сервлета, где JSF не будет обрабатывать все, что вы делаете.Когда вы вызываете этот метод, сервер возвращает ответ 302 вместо ответа AJAX, которого ожидал JavaScript API.
Правильный механизм для выполнения программного перенаправления в JSF - использовать ExternalContext :
FacesContext.getCurrentInstance()
.getExternalContext()
.redirect("yourUrl");
Если вы используете этот механизм с вызовом AJAX в JSF 2.0, сервер отправит ответ, подобный следующему:
<?xml version="1.0" encoding="utf-8"?>
<partial-response><redirect url="yourUrl"></redirect></partial-response>
Вы можете использоватьтакие инструменты, как Firebug и Fiddler для проверки ответов вашего сервера.
Обратите внимание, что подпись этого метода неверна: public void login()
.В спецификации говорится, что методы действия должны объявлять тип возвращаемого объекта (тот факт, что ваша реализация не выдает ошибку, просто означает, что вам повезло).