Можно легко транспонировать массив с zip.
a = [(1,2), (3,4), (5,6)]
zip(*a)
# [(1, 3, 5), (2, 4, 6)]
Не уверен, но попробуйте сделать это с помощью средств ExternalContext
:
Примерно так:
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
externalContext.redirect(externalContext.encodeResourceURL(externalContext.getRequestContextPath()+getUrl()));
Вы не описали какие-либо средства инфраструктуры, которые вы используете для аутентификации, поэтому я предполагаю, что вы выполняете аутентификацию в собственном коде. Вероятно, самым простым подходом было бы сохранить начальное место назначения в сеансе перед перенаправлением на страницу входа, а затем после успешного входа в систему вы можете проверить этот атрибут и перенаправить в нужное место. В частности, для JSF вы можете сделать это в методе действий, который обрабатывает вход в систему. На самом деле, я бы предложил использовать некоторую структуру для аутентификации, например Spring Security, потому что она делает такие вещи из коробки, и будет намного проще расширить вашу систему безопасности, если вам понадобятся некоторые дополнительные функции, хотя для этого нужны некоторые дополнительная конфигурация
Это исключение вызвано тем, что вы вызвали response.sendRedirect ()
и не заблокировали JSF от рендеринга нормального ответа. Вам нужно сообщить JSF, что ему не нужно обрабатывать обычный ответ, добавив
FacesContext.getCurrentInstance().responseComplete();
к методу действия.
Или, что еще лучше, просто не извлекайте HttpServletResponse
из-под JSF. вытяжки, но вместо этого сделайте:
FacesContext.getCurrentInstance().getExternalContext().redirect(url);
Это автоматически вызовет responseComplete ()
, а также очистит ваш код от ненужных вещей Servlet API. См. Также ExternalContext
API .
Вы опоздали, и это является исключением. Сделайте это в phaselistener до фазы отклика рендеринга.
java.lang.IllegalStateException: Невозможно переслать после того, как ответ был зафиксирован
Исключение вполне понятно:
Что не имеет смысла?
Описано логика (вход в систему, перенаправьте) должно быть реализовано через механику фильтра. Также вы можете попробовать стандартные правила навигации JSF (если он может соответствовать вам корпус). И если вы все еще хотите отправить перенаправить на пользовательский URL-адрес и не хотите использовать фильтры, сделайте это в своем сервлете в фазе Render, а не в вашей форме JSF.