我有一个页面 - 让我们称之为第X页 - 在那里我进行ajax
调用,填充用jqGrid
构造的表格。所以我在这里打电话给localhost:8080/servlet/ajax/Data.json
servlet
。
现在,如果页面过期且用户仍想访问该表(例如搜索数据),我想将请求重定向到Login
页面。
ajax
调用调用与我的servlet
页面(servletcontext
)不在同一Login
的Data.json localhost:8080/servlet/myapp
,因此我不能使用servlet
前进(我正在使用JBoss 4.2,我只能在同一个servletcontext
中转发。)
我尝试使用sendRedirect
重定向,该Login
能够调用实际执行但未显示的Login
页面。这就是我迷路的地方。我的Login
页面已执行,我仍然看到第X页。
我试图将返回的HTML(从Content-Type
页面)写入第X页的响应(我还将text/html
设置为Apache Turbine
)。 HTML将在响应中返回,但不会显示。
我正在使用servlet
,这是另一个{{1}},可在请求时检索页面。
你有什么想法?我不知道该怎么做。
答案 0 :(得分:2)
看起来servlet/ajax/Data.json
的servlet告诉AJAX请求重定向到登录页面。然后页面将尝试使用登录页面呈现jqGrid表,这可能不起作用。
您需要在向servlet/ajax/Data.json
进行AJAX调用的位置添加代码,以检查浏览器本身是否需要重定向。如果servlet返回302重定向作为响应,或者如果servlet返回一个简单的“SESSION EXPIRED”的错误,那么浏览器结束时对servlet进行AJAX调用的javascript知道会话已经过期并重定向浏览器到登录页面。
答案 1 :(得分:1)
Ajax调用是异步调用,对ajax调用的sendRedirect调用永远不会有效(ajax响应总是向启动器发送响应)。
您可能需要使用XMLHttpRequest状态代码查找页面过期,然后使用java脚本window.location将浏览器URL重置为登录URL。