неожиданный вкладка впо запросу AJAX после сбоя проверки - PullRequest
0 голосов
/ 23 апреля 2019

Я использую 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, кажется, работает как ожидалось.
...