Servlet过滤器中的jsf ajax重定向不起作用

问题描述

我有一个servlet过滤器,它将在会话期满后执行重定向

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

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

以下是partialResponseContent:

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

我在Chrome的“开发人员工具”屏幕中仔细检查了一下,发现内容已正确发送(请参见附件图像)。

enter image description here

解决方法

为此浪费了两天。但是,我很高兴终于能够正常工作。该问题是由url属性(在redirect元素中)的值未经过xml编码引起的。我的网址包含&字符。需要将其编码为&amp;为重定向工作。注意:我使用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>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...