Я использую JSF2.2 и настроил фильтр сервлета. Часть кода в фильтре, который работает:
HttpServletResponse response = (HttpServletResponse) resp;
if (userSession == null) {
redirectURLRegular = response.encodeRedirectURL("../login.xhtml?param1=noSession");
redirectURLAjax = response.encodeRedirectURL(request.getContextPath()
+ "/faces/login.xhtml?param1=noSession");
else{
chain.doFilter(req, resp);
return;
if (isAJAXRequest(request)) {
StringBuilder sb = new StringBuilder();
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<partial-response><redirect url=\"").append(redirectURLAjax)
.append("\"></redirect></partial-response>");
response.setHeader("Cache-Control", "no-cache");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/xml");
PrintWriter pw = response.getWriter();
pw.println(sb.toString());
pw.flush();
} else {
response.sendRedirect(redirectURLRegular);
}
Если сессия нулевая, перенаправление происходит как обычное, так и AJAX. На следующей странице (login.xhtml, requestScoped) я могу получить значение параметра (param1) в компоненте через
@ManagedProperty("#{param.param1}")
private String param1;
Если я добавляю второй параметр "../login.xhtml?param1=noSession¶m2=val2"
- обычные запросы работают (происходит перенаправление и отображаются оба параметра), но запрос AJAX не работает (нет перенаправления, ничего не происходит). Вот отчет Firebug:
XML Parsing Error: not well-formed Location: moz-nullprincipal:{4584d37a-e799-43db-8379-b0451edca95c} Line Number 1, Column 120:
..."/admin/faces/login.xhtml?param1=noSession¶m2=val2"></redirect></partial-r...
...-------------------------------------------------^
Чем это вызвано и как мы можем установить несколько параметров в фильтре для вызовов AJAX?