如何在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。
答案 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,您将会很好地掌握它们