栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

GET请求重定向由浏览器启动,但未成功

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

GET请求重定向由浏览器启动,但未成功

X-Requested-With: XMLHttpRequest
Faces-Request: partial/ajax

因此,您正在尝试使用“普通香草” Servlet API的JSF
ajax请求发送重定向

HttpServletResponse#sendRedirect()
。这是不对的。该
XMLHttpRequest
不会把302响应作为一个新的
window.location
,但只是作为一个新的Ajax请求。但是,当您返回一个完整的普通HTML页面作为ajax响应,而不是一个预定义的XML文档(其中包含要更新HTML部分的说明)时,JSF
ajax引擎不知道如何处理重定向的ajax请求的响应。您最终会遇到JS错误(您是否在JS控制台中看到了它?),如果未
jsf.ajax.onError()
配置处理程序,则没有任何形式的视觉反馈。

为了指示JSF
ajax引擎更改

window.location
,您需要返回一个特殊的XML响应。如果您
ExternalContext#redirect()
改为使用它,那么它将完全透明地进行。

externalContext.redirect(redirectURL);

但是,如果您不在JSF上下文中(例如,在servlet过滤器中),因此手边没有

FacesContext
,那么您应该手动创建并返回特殊的XML响应。

if ("partial/ajax".equals(request.getHeader("Faces-Request"))) {    response.setContentType("text/xml");    response.getWriter()        .append("<?xml version="1.0" encoding="UTF-8"?>")        .printf("<partial-response><redirect url="%s"></redirect></partial-response>", redirectURL);} else {    response.sendRedirect(redirectURL);}

如果您碰巧使用了JSF实用程序库OmniFaces,那么您也可以使用

Servlets#facesRedirect()
它:

Servlets.facesRedirect(request, response, redirectURL);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/413484.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号