我正在使用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中的错误,还是我做错了什么?
我的环境: