2011-11-11 57 views
2

我們使用Primefaces 3M4和我們的頁面中的一個具有p:dataTable的,它使用的事件Ajax調用:重定向作爲響應Ajax請求結束返回空

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

當會話超時頁面被重定向到/login.xhtml,它適用於非ajax動作(菜單項等),但是當我在數據表中選擇一行後會話過期,頁面不會更改爲登錄頁面,並且在Firebug中,我看到以下內容:

根據dashboard.xhtml螢火蟲的標題部分

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 

在login.xhtml的XML部分

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", "*"); 

回答

0

我找到了這個問題的答案in this blog

與在doRedirect方法的博客文章底部的相關代碼。

0

只是guess--

如果你想重定向從ajax響應,你可以不這樣做301/302風格 - 你必須發回消息給瀏覽器,並通過JavaScript重定向瀏覽器。

可能非阿賈克斯人的工作,因爲他們使用301/302s。

+0

添加了我用於執行上述響應的代碼 – Ryland