将JSF ajax请求重定向到servlet过滤器中带有请求参数的URL

将JSF ajax请求重定向到servlet过滤器中带有请求参数的URL,ajax,xml,jsf-2,servlet-filters,http-request-parameters,Ajax,Xml,Jsf 2,Servlet Filters,Http Request Parameters,我正在使用JSF2.2并配置了servlet过滤器。过滤器中工作的部分代码: HttpServletResponse=(HttpServletResponse)resp; if(userSession==null){ redirectURLRegular=response.encodeRedirectURL(“../login.xhtml?param1=noSession”); redirectURLAjax=response.encodeRedirectURL(request.getConte

我正在使用JSF2.2并配置了servlet过滤器。过滤器中工作的部分代码:

HttpServletResponse=(HttpServletResponse)resp;
if(userSession==null){
redirectURLRegular=response.encodeRedirectURL(“../login.xhtml?param1=noSession”);
redirectURLAjax=response.encodeRedirectURL(request.getContextPath())
+“/faces/login.xhtml?param1=noSession”);
否则{
链式过滤器(req,resp);
返回;
如果(请求){
StringBuilder sb=新的StringBuilder();
某人附加(”
");
setHeader(“缓存控制”、“无缓存”);
响应。setCharacterEncoding(“UTF-8”);
setContentType(“text/xml”);
PrintWriter pw=response.getWriter();
println(sb.toString());
pw.flush();
}否则{
response.sendRedirect(redirectURLRegular);
}
若会话为空重定向,则常规重定向和AJAX重定向都会发生。在下一页(login.xhtml,requestScoped)中,我可以通过

@ManagedProperty(#{param.param1})
私有字符串param1;
如果我添加第二个参数
”。/login.xhtml?param1=noSession¶m2=val2“
-常规请求工作(发生重定向并查看两个参数),但AJAX请求不工作(没有重定向,什么也不发生)。以下是Firebug报告:

XML Parsing Error: not well-formed Location: moz-nullprincipal:{4584d37a-e799-43db-8379-b0451edca95c} Line Number 1, Column 120:

..."/admin/faces/login.xhtml?param1=noSession&param2=val2"></redirect></partial-r...
...-------------------------------------------------^
XML解析错误:格式不正确的位置:moz nullprincipal:{4584d37a-e799-43db-8379-b041edca95c}行号1,第120列:

…“/admin/faces/login.xhtml?param1=noSession¶m2=val2”>在XML中,
&
是一个特殊字符,表示类似的
等的开始。XML解析器隐式地查找名称(
amp
lt
,等等)但是,您没有这样使用它,因此当webbrowser的XML解析器意外地遇到一个
=
,使其成为非-,它的XML解析器会感觉到它

您需要将XML特殊字符
&
转义到实体
&

redirectURLAjax=response.encodeRedirectURL(request.getContextPath())
+“/faces/login.xhtml?param1=noSession&;param2=val2”);