Я использую PrimeFaces '<p:tabMenu>
вместе с входными компонентами с проверкой. Всякий раз, когда происходит сбой проверки для таких компонентов ввода, переключение между вкладками невозможно (что является предполагаемым поведением). Однако при изменении ввода, вызвавшего ошибку проверки, последующий AJAX-запрос вызывает изменение активной вкладки.
Мне удалось воспроизвести поведение в очень простом примере:
<f:metadata>
<f:viewParam name="tab" value="#{bean.activeTab}" />
</f:metadata>
<h:form id="theForm">
<p:tabMenu id="menu" activeIndex="#{bean.activeTab}">
<p:menuitem id="tab0" update="menu content" value="Tab 0">
<f:param name="tab" value="0"/>
</p:menuitem>
<p:menuitem id="tab1" update="menu content" value="Tab 1">
<f:param name="tab" value="1"/>
</p:menuitem>
</p:tabMenu>
<h:panelGroup id="content">
<p>Active Tab: #{bean.activeTab}<br/></p>
<h:inputText id="someInput" value="#{bean.someInput}" required="true">
<p:ajax update="menu content"/>
</h:inputText>
<p:message id="m_someInput" for="someInput"/>
</h:panelGroup>
</h:form>
Основным компонентом для представления является @ViewScoped
и содержит только методы получения и установки для следующих свойств:
private String someInput = null;
private Integer activeTab = 0;
Запустите пример, попробуйте переключиться на «Tab 1», которая не работает из-за пустого поля someInput
и показывает ошибку проверки. Введите некоторый текст в поле ввода и щелкните за пределами ввода, чтобы вызвать событие изменения и запрос AJAX. Теперь вторая вкладка («Tab 1») становится активной! Зачем? Это ошибка в PrimeFaces или я что-то не так делаю?
Мое окружение:
- PrimeFaces 7.0
- JSF 2.2.15 (Мохарра)
- Wildfly 10.1.0. Финал
Обновление
- Я создал проблему на github # 4471 с проектом репродуктора.
- Проблема существует только с Мохаррой, даже с 2.3.9. MyFaces, кажется, работает как ожидалось.