【问题标题】:Tab is displaying the default , Need to show the tab which we select选项卡显示默认,需要显示我们选择的选项卡
【发布时间】:2013-01-24 03:40:08
【问题描述】:

我用的是prime face 3.4版,问题出在tab view显示上。

<p:messages id="messages"/>
<p:tabView id="tabView" dynamic="false">

    <p:tab id="tab1" title="Navigation">

    <p:tab id="tab2" title="Email Address">

    <p:tab id="tab3" title="Password">

</p:tabView>

这是一个带有 3 个选项卡(通知、电子邮件和密码)的选项卡式页面,如果我在电子邮件选项卡上没有输入任何值我单击提交,它会在顶部显示错误消息并默认为第一个选项卡,我需要显示电子邮件标签

【问题讨论】:

  • 只有当您在每个选项卡中有单独的表单而不是在选项卡视图之外有一个表单时,才能重现您的问题。然而,这在目前提供的代码中是不可见的(它本身也有严重的语法错误,我已修复,请多加注意并爱上代码,以便人们可以通过复制粘贴来重现您的问题)。跨度>
  • 感谢您的更正,我已经编辑了我共享的代码。此外,当我们有一个全局表单时,会添加错误消息(例如,当我从一个选项卡移动到另一个选项卡并单击保存按钮。)。如有错误请见谅。

标签: jsf primefaces


【解决方案1】:

使用 ajax=false,整个页面会在您单击按钮后刷新,并且选项卡视图会将您带到第一页,就像您第一次导航到该页面一样。

您可以将 Ajax 设置为 true 或使用 bean 上的整数作为选项卡视图的选定索引(如果内存没有让我失望,则选项卡视图上有一个名为 selectedIndex 的属性)。然而,第二个选项仅适用于视图、会话和应用程序范围的 bean。

【讨论】:

  • 感谢您的响应。我尝试将 Ajax 值设置为 true ,但我又遇到了同样的问题。当我从一个选项卡移动到另一个选项卡时,顶部出现的错误消息也需要删除。
【解决方案2】:

&lt;p:messages id="messages"&gt; 标签放在&lt;p:tab id="tab2" title="Email Address"&gt; 标签内。请注意,它将显示来自同一表单内(或任何选项卡)内任何经过验证的组件的消息。您应该使用&lt;p:message for="componentId"&gt; 来显示特定于组件的消息。

【讨论】:

  • 需要在顶部而不是 TAB 内显示消息,我尝试了这个选项,它显示错误消息但将其导航到默认屏幕。
  • 上面的代码在全局顶部显示了消息,问题是它没有显示发生错误消息的选项卡。