java – 使用JSF 2.0 / Facelets,有没有办法将全局监听器附加到
有没有办法将全局监听器附加到JSF中的所有
AJAX调用?也许是通过一个阶段的听众呢?
这是难题…让我们说你使用f:ajax标签和apache shiro,你让你的会话过期.然后你回来点击一个附有f:ajax的按钮.服务器将通过302重定向到登录页面进行响应. 用户什么也看不到.他们可以反复点击并调用ajax调用,但对他们来说,应用程序只是“死了”. 所以,我的是,有没有办法附加一个监听器到JSF中的所有ajax调用?如果是这样,我想做的是监控响应代码.如果是重定向,请使用window.navigate方式发送它们. 我总是乐意听到其他人如何解决这个问题! 解决方法
是的, 如果您在JSF上下文中,那么可以检查当前请求是否为ajax请求. if (FacesContext.getCurrentInstance().getPartialViewContext().isAjaxRequest()) { // It's an ajax request. } 如果你不在JSF上下文,例如在一个过滤器中,那么可以检查当前的请求是否是JSF ajax请求. if ("partial/ajax".equals(request.getHeader("Faces-Request"))) { // It's a JSF ajax request. }
强制ajax请求的重定向需要特殊的XML响应.当您在JSF上下文中时, FacesContext.getCurrentInstance().getExternalContext().redirect(url); 如果你不在JSF上下文,例如在筛选器中,您需要自己编写整个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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |