Перенаправить запрос ajax JSF на URL-адрес с параметрами запроса в фильтре сервлета

Я использую 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&param2=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&param2=val2"></redirect></partial-r...
...-------------------------------------------------^

Чем это вызвано и как мы можем установить несколько параметров в фильтре для вызовов AJAX?


person Helija    schedule 15.11.2013    source источник


Ответы (1)


& — это специальный символ в XML, обозначающий начало сущности, например &amp;, &lt;, и т. д. Анализатор XML неявно ищет имя (amp, lt и т. д.) и окончание ;. Однако вы не использовали его как таковой, и, следовательно, синтаксический анализатор XML веб-браузера почувствовал это, когда неожиданно обнаружил =, что сделало его не-правильный XML.

Вам нужно экранировать специальный символ XML & в сущность &amp;.

redirectURLAjax = response.encodeRedirectURL(request.getContextPath()
            + "/faces/login.xhtml?param1=noSession&amp;param2=val2");
person BalusC    schedule 16.11.2013