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

使用JSF 2.0 / Facelets,是否可以将全局侦听器附加到所有AJAX调用?

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

使用JSF 2.0 / Facelets,是否可以将全局侦听器附加到所有AJAX调用?

有没有办法将全局侦听器附加到JSF中的所有AJAX调用? 也许通过相位监听器之类的东西?

是的,一个

PhaseListener
可以做到。一
SystemEventListener
也。一
Filter
也。

如果您在JSF上下文中,则可以按以下方法检查当前请求是否为ajax请求。

if (FacesContext.getCurrentInstance().getPartialViewContext().isAjaxRequest()) {    // It's an ajax request.}

如果您不在JSF上下文内,例如在内

Filter
,则可以按以下方法检查当前请求是否为JSF ajax请求。

if ("partial/ajax".equals(request.getHeader("Faces-Request"))) {    // It's a JSF ajax request.}

这是一个难题……假设您正在使用f:ajax标记和apache shiro之类的东西,并且您的会话将过期。
然后,您返回并单击附加了f:ajax的按钮。服务器将响应302重定向到登录页面。

用户什么都看不到。 他们可以反复单击并调用ajax调用,但对他们来说,该应用程序只是“死”。

强制对ajax请求进行重定向需要特殊的XML响应。当您在JSF上下文中时,

ExternalContext#redirect()
已经隐式考虑了这一点。您所需要做的就是编写以下代码:

FacesContext.getCurrentInstance().getExternalContext().redirect(url);

如果您不在JSF上下文之内,例如在之中

Filter
,那么您需要自己编写整个XML响应。例如

response.setContentType("text/xml");response.getWriter()    .append("<?xml version="1.0" encoding="UTF-8"?>")    .printf("<partial-response><redirect url="%s"></redirect></partial-response>", url);


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

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

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