验证失败后,AJAX请求上的<p:tabmenu>中出现意外的Tab切换

时间:2019-04-23 13:34:33

标签: primefaces jsf-2 mojarra

我正在使用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>

该视图的备用bean是@ViewScoped,并且仅包含以下属性的getter和setter:

private String someInput = null;
private Integer activeTab = 0;

运行示例,尝试切换到“制表符1”,由于空someInput字段而失败,并显示验证失败。在输入字段中输入一些文本,然后在输入外部单击以触发更改事件和AJAX请求。现在,第二个选项卡(“选项卡1”)激活!为什么?这是PrimeFaces中的错误,还是我做错了什么?

我的环境:

  • PrimeFaces 7.0
  • JSF 2.2.15(Mojarra)
  • Wildfly 10.1.0.Final

更新

  • 我在github #4471上创建了一个带有复制程序项目的问题。
  • 该问题仅在Mojarra中存在,甚至在2.3.9中也存在。 MyFaces似乎可以正常工作。

0 个答案:

没有答案