【问题标题】:jsf ajax redirect from servlet filter not working来自servlet过滤器的jsf ajax重定向不起作用
【发布时间】:2021-02-19 15:54:31
【问题描述】:

我有一个 servlet 过滤器,它会在会话过期时执行重定向。

对于非 ajax 请求,过滤器执行 HttpServletResponse.sendRedirect(myUrl) 来执行重定向,效果很好。但是,我不能对 ajax 类型的请求说同样的话。

对于 ajax 请求,过滤器执行 HttpServletResponse.getWriter().println(partialResponseContent) 来执行重定向。它不起作用。屏幕保持不变,似乎被冻结并且所有输入字段都被禁止。关于我可能缺少什么或我可以尝试找出问题原因的任何指针?

以下是部分响应内容:

<?xml version="1.0" encoding="UTF-8"?><partial-response><redirect url="/MyAccount/command?cmd=twoFA&TargetUrl=/MyAccount/viewDevices.jsf"></redirect></partial-response>

我在 Chrome 的开发者工具屏幕中仔细检查了它,发现内容发送正确(见附图)。

【问题讨论】:

    标签: ajax jsf-2


    【解决方案1】:

    为此浪费了两天时间。但我很高兴终于让它工作了。该问题是由 url 属性的值(在重定向元素中)未进行 xml 编码引起的。我的网址包含一个 & 字符。它需要被编码为&重定向工作。注意:我使用 org.apache.commons.lang.StringEscapeUtils.escapeXml 来进行 xml 编码。

    下面是之前的编码:

    <?xml version="1.0" encoding="UTF-8"?><partial-response><redirect url="/MyAccount/command?cmd=twoFA&TargetUrl=/MyAccount/viewDevices.jsf"></redirect></partial-response>
    

    下面是编码后的:

    <?xml version="1.0" encoding="UTF-8"?><partial-response><redirect url="command?cmd=twoFA&amp;TargetUrl=/MyAccount/viewDevices.jsf"></redirect></partial-response>
    

    【讨论】:

      猜你喜欢
      • 2012-06-10
      • 2013-06-29
      • 2014-10-26
      • 2013-11-29
      • 1970-01-01
      • 2011-02-09
      • 2012-06-11
      • 2018-04-14
      • 1970-01-01
      相关资源
      最近更新 更多