Primefaces AJAX事件在tabView中无法正常工作

时间:2012-01-03 08:03:32

标签: primefaces

如何在tabview中使用AJAX侦听器。无论何时打开选项卡(或鼠标单击任何地方),都需要执行侦听器。我尝试了事件=点击,更改,模糊等,但没有奏效。

<p:tabView activeIndex="#{backingbean.tanIndex}">
<p:ajax  event="?"  listener="#{backingbean.setTabIndex}" />

在view.jsf中:

<p:tabView>
    <p:ajax event="tabChange" listener="#{employeeEdit.onTabChange}">

在edit.jsf中:

 <p:tabView activeIndex="#{employeeEdit.tabIndex}">
在backingBean中

private int tabIndex;
public int onTabChange(TabChangeEvent event)
  {  
   // Here I'm getting event.getTab().getId() and set it to `tabIndex` property.
  }

编辑时我需要重定向到视图中活动的那个标签。因此,如果我没有更改标签onTabChange()将无法执行,tabIndex仅具有旧值。 我正在使用Primefaces版本-3.0.M3。

4 个答案:

答案 0 :(得分:1)

看起来这是在最新的3.0.1版本中修复的Primefaces错误: http://forum.primefaces.org/viewtopic.php?f=3&t=17288

答案 1 :(得分:1)

我在使用Primefaces 5.1时遇到了类似的问题

只要我将tabview放入表单中,一切正常。 但是因为我想在我的标签中使用单独的表单,我不得不删除tabview的周围形式以避免嵌套表单。 如果没有周围的形式,更改标签时不会再触发ajax事件。

我的解决方案是以与tabview平行的形式使用remotecommand remoteview由tabview元素的onTabChange属性触发。 在该调用中,我将index参数转发到全局请求参数。

<p:tabView id="rootTabMenu" styleClass="tabcontainer" prependId="false" 
        activeIndex="#{sessionData.activeTabIndex}" widgetVar="rootTabMenu"
        onTabChange="tabChangeHelper([{name: 'activeIndex', value: index}])">
    // Tabs...  
</p:tabView>

<h:form id="tabChangeHelperForm">
    <p:remoteCommand name="tabChangeHelper" actionListener="#{sessionData.onTabChange()}" />
</h:form>    

在支持bean中,我从请求参数映射中再次捕获了值并设置了活动索引。

public void onTabChange()
{   
    FacesContext context = FacesContext.getCurrentInstance();
    Map<String, String> paramMap = context.getExternalContext().getRequestParameterMap();
    String paramIndex = paramMap.get("activeIndex");
    setActiveTabIndex(Integer.valueOf(paramIndex));
    System.out.println("Active index changed to " + activeTabIndex);
}    

希望能帮到你

答案 2 :(得分:0)

不确定我写的内容是否适用于3.0版.M3。我在ver 3.0RC2的文档前面有一个关于这个的段落,有解释和示例代码(章TabView,段Ajax Behaviour Events)。你应该看一下。

这是示例代码中应该帮助最多的部分:

<p:tabView>
    <p:ajax event=”tabChange” listener=”#{bean.onChange}” />
</p:tabView>

答案 3 :(得分:0)

Jaron有一个答案,3.0.1版本解决了这个问题,但我一直到3.5,我相信我还有这个问题。在Firefox和IE上,Tabs的javascript处理程序没有触发ajax事件。在谷歌浏览器上,无论出于何种原因,它实际上都有效。

我今天升级到Primefaces 5.0,这不再有问题了。因此,在最糟糕的情况下,请访问Primefaces 5.0,您将会很好地掌握它们