Primefaces AJAX事件在tabView中不起作用

Primefaces AJAX事件在tabView中不起作用,primefaces,Primefaces,如何在选项卡视图中使用AJAX侦听器。每当选项卡打开时(或鼠标单击任何位置),侦听器都需要执行。我尝试了event=单击、更改、模糊等,但没有成功 <p:tabView activeIndex="#{backingbean.tanIndex}"> <p:ajax event="?" listener="#{backingbean.setTabIndex}" /> 编辑时,我需要重定向到该选项卡,该选项卡在视图中处于活动状态。因此,如果我没有更改选项卡onTabCha

如何在选项卡视图中使用AJAX侦听器。每当选项卡打开时(或鼠标单击任何位置),侦听器都需要执行。我尝试了event=单击、更改、模糊等,但没有成功

<p:tabView activeIndex="#{backingbean.tanIndex}">
<p:ajax  event="?"  listener="#{backingbean.setTabIndex}" />
编辑时,我需要重定向到该选项卡,该选项卡在视图中处于活动状态。因此,如果我没有更改选项卡
onTabChange()
将不会执行,并且
tabIndex
仅具有其旧值。
我使用的是Primefaces 3.0.M3版。

不确定我所写的内容是否适用于3.0.M3版。我在3.0RC2版本的文档前面有一段关于这一点的说明和示例代码(章节
TabView
,段落
Ajax行为事件
)。你应该看看这个

这是示例代码中最有帮助的部分:

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

看起来这是最新3.0.1版本中修复的Primefaces错误:
Jaron的回答是3.0.1版解决了这个问题,但我一直到3.5版都有这个问题,我相信我仍然有这个问题。在firefox和IE上,选项卡的javascript处理程序没有触发ajax事件。在谷歌chrome上,不管出于什么原因,它实际上是有效的


今天我升级到Primefaces 5.0,这不再有问题了。因此,在最坏的情况下,转到Primefaces 5.0,您将在引擎盖中表现良好

Primefaces 5.1也有类似的问题

只要我把tabview变成一种形式,一切都很好。 但是因为我想在我的选项卡中使用单独的表单,所以我不得不删除选项卡视图周围的表单以避免嵌套表单。 如果没有周围的表单,更改选项卡时将不再触发ajax事件

我的解决方案是以与tabview并行的形式使用remotecommand。
remotecommand由tabview元素的onTabChange属性触发。 在那个调用中,我将索引参数转发给全局请求参数

<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>    

//标签。。。
在backingbean中,我再次从请求参数映射中捕获该值,并设置活动索引

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);
}    
public void onTabChange()
{   
FacesContext context=FacesContext.getCurrentInstance();
Map paramMap=context.getExternalContext().getRequestParameterMap();
字符串paramIndex=paramMap.get(“activeIndex”);
setActiveTabIndex(Integer.valueOf(paramIndex));
System.out.println(“活动索引更改为”+activeTabIndex);
}    

希望这能对您有所帮助,event=“tabChange”在3.0.M3中也可以,但是如果我没有更改选项卡,AJAX listener将不会执行。所以我在backingbean中的代码没有任何意义,我不明白。你能用更多的信息更新你的问题吗,比如支持bean和你到底想做什么
<p:tabView>
    <p:ajax event=”tabChange” listener=”#{bean.onChange}” />
</p:tabView>
<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>    
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);
}