JSF 2.3: «Индекс массива вне диапазона» при отображении формы с URL-адресом, содержащим «

#url #websphere-liberty #rerender #jsf-2.3

#url #websphere-liberty #повторный запуск #jsf-2.3

Вопрос:

Задан URL-адрес с параметрами, такими, что:

 page.xhtml?param1=valueamp;amp;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 для сужения области повторного рендеринга позволяет мне обойти проблему.

С учетом сказанного, мне интересно, есть ли другие варианты решения этой проблемы?

Использование Liberty 18.0.0.3 от IBM, JSF 2.3 от IBM [1.0.0]

Комментарии:

1. Я не могу воспроизвести эту ошибку. Можете ли вы предоставить небольшое приложение?

Ответ №1:

Этой версии WebSphere Liberty почти 3 года, поэтому я бы сначала рекомендовал перейти на последнюю версию WebSphere Liberty (или Open Liberty) и проверить, была ли проблема с тех пор решена.

С архитектурой нулевой миграции Liberty переход на последнюю версию должен быть довольно плавным …. и вы получите не только исправления ошибок и безопасности на ~ 3 года, но и улучшения производительности и разработки.

Ответ №2:

Похоже, эта проблема уникальна для конфигураций моего проекта. После некоторых выборочных удалений и добавлений было обнаружено, что виновником был обработчик представления, ответственный за повторное прикрепление параметров запроса обратно к URL-адресу.

Строка параметра

 param1=valueamp;amp;param2=value
 

Будет повторно присоединен как

 =amp;param1=valueamp;param2=value
 

Что, в свою очередь, вызвало исключение кодирования.

Спасибо и приношу извинения.