首页 > 解决方案 > JSF 2.3:“数组索引超出范围”在呈现带有包含“&&”的 Url 的表单时

问题描述

给定一个带有参数的 url,例如:

page.xhtml?param1=value&&param2=value

似乎在该页面上提交表单后,出现以下异常和堆栈跟踪:

java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0
    at org.apache.myfaces.context.servlet.ServletExternalContextImpl.encodeURL(ServletExternalContextImpl.java:906)
    at org.apache.myfaces.context.servlet.ServletExternalContextImpl.encodeActionURL(ServletExternalContextImpl.java:364)
    at javax.faces.context.ExternalContextWrapper.encodeActionURL(ExternalContextWrapper.java:80)
    at org.apache.myfaces.shared.renderkit.html.HtmlFormRendererBase.encodeBegin(HtmlFormRendererBase.java:88)
    at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:597)
    at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:527)
    at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:551)
    at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:551)
    at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1897)

似乎在重新渲染表单时会发生这种情况。

使用 ajax 来缩小重新渲染的范围可以让我绕过这个问题。

话虽如此,我想知道是否有更多选项可以解决此问题?

使用 IBM 的 Liberty 18.0.0.3、IBM 的 JSF 2.3 [1.0.0]

标签: urlwebsphere-libertyrerenderjsf-2.3

解决方案


看来这个问题是我的项目配置所独有的。在进行了一些选择性删除和添加之后,发现负责将请求参数重新附加到 url 的视图处理程序是罪魁祸首。

参数字符串

param1=value&&param2=value

将重新附加为

=&param1=value&param2=value

这反过来又导致了编码异常。

谢谢你和道歉。


推荐阅读