Учитывая URL-адрес с такими параметрами, что:
page.xhtml?param1=value&¶m2=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]
Этой версии WebSphere Liberty почти 3 года, поэтому я бы рекомендовал сначала перейти на последнюю версию WebSphere Liberty (или Open Liberty) и проверить, была ли проблема решена с тех пор.
Благодаря архитектуре Liberty с нулевой миграцией переход на последнюю версию должен быть довольно плавным... и вы не только получите исправления ошибок и безопасности на ~ 3 года, но также улучшения производительности и разработки.
Похоже, эта проблема уникальна для конфигураций моего проекта. После некоторых выборочных удалений и дополнений было обнаружено, что виновником был обработчик представления, ответственный за повторное присоединение параметров запроса обратно к URL-адресу.
Строка параметров
param1=value&¶m2=value
Будет присоединен как
=¶m1=value¶m2=value
Что, в свою очередь, вызвало исключение кодирования.
Спасибо и извините.
Я не могу воспроизвести эту ошибку. Можете ли вы предоставить небольшое приложение?