Перенаправление в ответ на запрос Ajax заканчивается пустым

Мы используем Primefaces 3M4, и на одной из наших страниц есть таблица p:dataTable, которая использует вызовы ajax для событий:

<p:ajax event="rowSelect" update=":newsForm:newsDlg" oncomplete="newsDlg.show();"/>

Когда время сеанса истекает, страница перенаправляется на /login.xhtml, который отлично работает для действий, отличных от ajax (элементы меню и т. д.), но когда я выбираю строку в таблице данных после истечения сеанса, страница не меняется на страница входа и в Firebug я вижу следующее:

В разделе "Заголовки" файла dashboard.xhtml файла Firebug

Response Headers
Server  Apache-Coyote/1.1
X-Powered-By    JSF/2.0
Location    http://localhost:8080/RetailerPortal/faces/login.xhtml
Content-Length  0
Date    Fri, 11 Nov 2011 18:32:42 GMT

Request Headers
Host    localhost:8080
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0
Accept  application/xml, text/xml, */*; q=0.01
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip, deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection  keep-alive
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
Faces-Request   partial/ajax
X-Requested-With    XMLHttpRequest
Referer http://localhost:8080/RetailerPortal/faces/dashboard.xhtml
Content-Length  389
Cookie  csfcfc=_30Xsr; JSESSIONID=fg1bV1sZkzKIgNtkH0bz0N0f; JSESSIONID=C65BF4EED70299ABFE4B73614118295E

Под ответом dashboard.xhtml

<?xml version='1.0' encoding='ISO-8859-1'?>
<partial-response><changes><update id="javax.faces.ViewState"><![CDATA[-3728406524126180805:2441995557020829808]]></update></changes></partial-response>

Под публикацией dashbaoard.xhtml

Parametersapplication/x-www-form-urlencoded
javax.faces.ViewState   7521050094575005695:7928145831130537413
javax.faces.behavior.even...    rowSelect
javax.faces.partial.ajax    true
javax.faces.partial.event   rowSelect
javax.faces.partial.execu...    newsForm:newsTable
javax.faces.partial.rende...    newsForm:newsDlg
javax.faces.source  newsForm:newsTable
newsForm    newsForm
newsForm:newsTable_instan...    3
newsForm:newsTable_select...    3
Source
newsForm=newsForm&newsForm%3AnewsTable_selection=3&javax.faces.ViewState=7521050094575005695%3A7928145831130537413&javax.faces.partial.ajax=true&javax.faces.source=newsForm:newsTable&javax.faces.partial.execute=newsForm:newsTable&javax.faces.partial.render=newsForm:newsDlg&javax.faces.behavior.event=rowSelect&javax.faces.partial.event=rowSelect&newsForm:newsTable_instantSelectedRowKey=3

Под заголовками файла login.xhtml

Response Headers
Server  Apache-Coyote/1.1
X-Powered-By    JSF/2.0
Cache-Control   no-cache
Set-Cookie  JSESSIONID=MdhyizD+8IkuFvLZD+6jWlUz; Path=/RetailerPortal
Content-Type    text/xml;charset=UTF-8
Content-Length  196
Date    Fri, 11 Nov 2011 18:32:42 GMT
Request Headers
Host    localhost:8080
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0
Accept  application/xml, text/xml, */*; q=0.01
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip, deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection  keep-alive
Referer http://localhost:8080/RetailerPortal/faces/dashboard.xhtml
X-Requested-With    XMLHttpRequest
Faces-Request   partial/ajax
Content-Type    application/x-www-form-urlencoded
Cookie  csfcfc=_30Xsr; JSESSIONID=fg1bV1sZkzKIgNtkH0bz0N0f; JSESSIONID=C65BF4EED70299ABFE4B73614118295E

В разделе XML файла login.xhtml

XML Parsing Error: no element found Location: moz-nullprincipal:{6ccf85cf-5c69-438c-a9bb-e66423a36a48} Line Number 1, Column 1:

^

Код ответа

HttpServletResponse servResponse = (HttpServletResponse) response;                  
servResponse.sendRedirect("login.xhtml");
servResponse.setHeader("Access-Control-Allow-Origin", "*");

person Ryland    schedule 11.11.2011    source источник


Ответы (2)


Просто предположение--

Если вы пытаетесь перенаправить из ответа ajax, вы не можете сделать этот стиль 301/302 - вам нужно отправить сообщение обратно в браузер и перенаправить браузер через javascript.

Вероятно, не-ajax работают, потому что они используют 301/302.

person Micah    schedule 11.11.2011