PrimeFaces 3.0:如何使用`<p:tabView>`更改选项卡焦点

Mr.*_*mes 1 java jsf tabs primefaces

在我的应用中,当用户点击某个项目时,我会使用<p:tabView>内部<p:dialog>来显示该项目的详细信息.根据项目类型,有些会有额外的标签.它类似于以下内容:

<p:dataTable value="#{mrBean.items}" var="item" >
   <p:ajax event="rowSelect" listener="#{mrBean.showItemDetails}" update="itemDetails" oncomplete="eventDialog.show();" />
   ...
</p:schedule>

<p:dialog id="detailsDlg" onHide="detailsTab.select(0);">
   <p:tabView effect="fade" widgetVar="detailsTab" id="itemDetails">
      <tab title="General details">
         ...
      </tab>

      <tab rendered="#{mrBean.item.type == 'Book'}" title="Author">
         ...
      </tab>
   </p:tabView>
</p:dialog>
Run Code Online (Sandbox Code Playgroud)

当我单击Book并导航到Author选项卡以查看作者的详细信息时,请考虑这种情况.现在,如果我关闭对话框而不切换回General details选项卡,我点击除了之外的一些项目Book(这意味着它们没有Author标签),我的对话框似乎仍然在隐形 Author标签上.即使我试图点击General tab它,它也不会再渲染了.

更新:

我尝试使用和的客户端API,<p:tabView>并在属性中<p:dialog>调用.情况好一点.但是,我单击一个后单击的第一个项目(不是a)会遇到与上面相同的情况.从第2项开始,一切都还可以.有没有办法让它立即运作?detailsTab.select(0)onHide<p:dialog>BookBook

如果你能告诉我如何解决这个问题,我将非常感激.

Mr.*_*mes 5

我终于找到了解决方案.在<p:tabView>标签中,我尝试通过设置产生一些效果effect="fade".我认为这种效果可能会导致代码执行中的一些延迟,因此,在下一个请求之前,我看不到切换结果.

关闭效果并detailsTab.select(0);输入oncomplete我的<p:ajax>事件的属性后,它现在正在工作.

<p:dataTable value="#{mrBean.items}" var="item" >
   <p:ajax event="rowSelect" listener="#{mrBean.showItemDetails}" 
           update="itemDetails" oncomplete="eventDialog.show();detailsTab.select(0);" />
   ...
</p:schedule>

<p:dialog>
   <p:tabView widgetVar="detailsTab" id="itemDetails">
      <tab title="General details">
         ...
      </tab>

      <tab rendered="#{mrBean.item.type == 'Book'}" title="Author">
         ...
      </tab>
   </p:tabView>
</p:dialog>
Run Code Online (Sandbox Code Playgroud)

需要注意的一点是,当我关闭而effect没有detailsTab.select(0);输入事件的oncomplete属性时<p:ajax>,仍然会出现此问题.换句话说,对话框仍然显示隐形标签.但是,当我单击General选项卡时,此选项卡的内容完美呈现.问题显然只发生在我使用的时候effect.这可能是一个错误<p:tabView>.

我认为我的解决方案不是很优雅,因为我不得不关闭效果:P.如果您能提供任何可以使用的解决方案effect,我将非常乐意接受您的答案:).