Primefaces tabview的活动索引未自动更新
活动索引未自动更新。在一些帖子中读到,通过将选项卡视图放在表单上,它可以工作。或者通过在选项卡视图中包含Primefaces tabview的活动索引未自动更新,primefaces,tabview,Primefaces,Tabview,活动索引未自动更新。在一些帖子中读到,通过将选项卡视图放在表单上,它可以工作。或者通过在选项卡视图中包含,它可以工作。但似乎什么都不管用 xhtml 示例1:自动更新 bean private Integer activeTabIndex = 0; public Integer getActiveTabIndex() { return activeTabIndex; } public void setActiveTabIndex(Integer activeTabIndex) {
,它可以工作。但似乎什么都不管用
xhtml
示例1:自动更新
bean
private Integer activeTabIndex = 0;
public Integer getActiveTabIndex() {
return activeTabIndex;
}
public void setActiveTabIndex(Integer activeTabIndex) {
this.activeTabIndex = activeTabIndex;
}
public void tabChanged(TabChangeEvent event){
TabView tv = (TabView) event.getComponent();
this.activeTabIndex = tv.getActiveIndex();
}
但这一事件并没有被触发。也不会自动更新
可能的问题是什么
谢谢,
什喀
**_____/>_____**
public void tabChange(TabChangeEvent event){
TabView tabView = (TabView) event.getComponent();
Tab tab = (Tab) event.getTab();
String tabChangedMessage = tab.getTitle() + " changed. index=" + tabView.getActiveIndex();
System.out.println(tabChangedMessage);
FacesContext fc = FacesContext.getCurrentInstance();
fc.addMessage(null, new FacesMessage("Tab changed", tabChangedMessage));
}
<p:tabView>
<p:ajax event="tabChange" listener="#{tabChangeBean.tabChange}" update=":growlId" />
<p:tab title="tab 1">
tab1 inside
</p:tab>
<p:tab title="tab 2">
tab1 inside
</p:tab>
</p:tabView>
公共作废tabChange(TabChangeEvent事件){
TabView TabView=(TabView)event.getComponent();
Tab=(Tab)event.getTab();
字符串tabChangedMessage=tab.getTitle()+“changed.index=“+tabView.getActiveIndex();
System.out.println(tabChangedMessage);
FacesContext fc=FacesContext.getCurrentInstance();
fc.addMessage(空,新面孔消息(“Tab已更改”,tabChangedMessage));
}
内表1
内表1
这可以工作,但活动索引为0 在xhtml中,您调用的是listener=“#{promotionDetailBean.onTabChange>”,但在您的bean中,方法名称是“public voidtabchange”。所以它不能触发 我在prime showcase上尝试了一个示例: 在bean中(TabBean):
private Integer activeTabIndex = 1;
// setter/getter
public void onTabChange(TabChangeEvent event) {
FacesMessage msg = new FacesMessage("Tab Changed", "Active Tab: " + event.getTab().getTitle());
TabView tabView = (TabView) event.getComponent();
int activeTabIndex = tabView.getActiveIndex();
System.out.println("--------" + activeTabIndex);
FacesContext context = FacesContext.getCurrentInstance();
Map<String, String> params = context.getExternalContext().getRequestParameterMap();
String activeIndexValue = params.get(tabView.getClientId(context) + "_activeIndex");
System.out.println("--------" + activeIndexValue);
context.addMessage(null, msg);
}
<p:tabView id="tabView" dynamic="true" activeIndex="#{tabBean.activeTabIndex}">
<p:ajax event="tabChange" listener="#{tabBean.onTabChange}" update=":form:growl"/>
<p:tab title="Godfather Part I" id="Godfather1">
private Integer activeTabIndex=1;
//二传手
公共无效onTabChange(TabChangeEvent事件){
FacesMessage msg=新的FacesMessage(“选项卡已更改”,“活动选项卡:”+event.getTab().getTitle());
TabView TabView=(TabView)event.getComponent();
int activeTabIndex=tabView.getActiveIndex();
System.out.println(“----------”+activeTabIndex);
FacesContext context=FacesContext.getCurrentInstance();
Map params=context.getExternalContext().getRequestParameterMap();
字符串activeIndexValue=params.get(tabView.getClientId(上下文)+“\u activeIndex”);
System.out.println(“----------”+activeIndexValue);
addMessage(null,msg);
}
在xhtml中(tabviewChangeListener.xhtml):
private Integer activeTabIndex = 1;
// setter/getter
public void onTabChange(TabChangeEvent event) {
FacesMessage msg = new FacesMessage("Tab Changed", "Active Tab: " + event.getTab().getTitle());
TabView tabView = (TabView) event.getComponent();
int activeTabIndex = tabView.getActiveIndex();
System.out.println("--------" + activeTabIndex);
FacesContext context = FacesContext.getCurrentInstance();
Map<String, String> params = context.getExternalContext().getRequestParameterMap();
String activeIndexValue = params.get(tabView.getClientId(context) + "_activeIndex");
System.out.println("--------" + activeIndexValue);
context.addMessage(null, msg);
}
<p:tabView id="tabView" dynamic="true" activeIndex="#{tabBean.activeTabIndex}">
<p:ajax event="tabChange" listener="#{tabBean.onTabChange}" update=":form:growl"/>
<p:tab title="Godfather Part I" id="Godfather1">
结果与预期一致:
开始时,将显示第二个选项卡。我单击第一个选项卡,然后单击第三个选项卡。sysout是:
--------0
--------0
--------二,
--------2以下几点对我很有用: XHTML:
<p:tabView id="categoryTabView" var="promoArticle"
value="#{promotionDetailManagedBean.articuloPromocionDTOs}" dynamic="true">
<p:ajax event="tabChange" listener="#{promotionDetailManagedBean.onTabChange}" />
<p:tab> ... </p:tab>
</p:tabView>
这似乎只适用于以下情况。但是这对我来说是无用的,因为我想保持一个备份bean视图同步。我很惊讶Primefaces团队还没有解决它(我正在使用3.5版本)。但是,如果
p:tabView
本身被包装到h:form
中,而不是每个选项卡都有一个选项卡,则它会起作用,但这会使您更改提交上下文。当选项卡不包含在表单中,但每个选项卡都包含自己的选项卡时,这对我有效:
public void onSPTabChange(TabChangeEvent event)
{
TabView tabView = (TabView) event.getComponent();
currentData.setSP_Index(tabView.getChildren().indexOf(event.getTab())+1);
}
在currentdata中,我有属性SP_索引和选项卡编号(第一,第二…)
....
并添加jquery脚本
<script>
$("#tabView li:nth-child(#{currentData.SP_Index})").click();
</script>
$(“#tabView li:n子项(#{currentData.SP_Index})”)。单击();
对于primefaces>=5.0
请使用以下代码:
public final void onTabChange(TabChangeEvent event) {
TabView tv = (TabView) event.getComponent();
this.ActiveIndex = tv.getChildren().indexOf(event.getTab());
}
这对我很有用…extra/>是一个打字错误。。我也曾尝试过,但没有立即停止。不起作用。我现在已经尝试了你的示例,但activeIndex始终为0。也许我有什么地方做错了,但我必须尝试一下。此外,我将编辑我的答案,您应该检查它。另外,activeTabIndex的setter setActiveTabIndex()是使用正确的索引值调用的。在xhtml中,您应该将tabView放在h:form组件中,该组件似乎只有在以下情况下才起作用。我很惊讶Primefaces团队还没有解决这个问题(我正在使用3.5版本)。但是,如果
选项卡视图
本身被包装成一个表单,而不是每个选项卡都有一个表单,那么它就可以工作;不起作用。相反,您可以使用这个.activeTabIndex=tv.getChildren().indexOf(event.getTab());索引以0或1开头?这与其他答案有什么不同?似乎是Android:)
public void onSPTabChange(TabChangeEvent event)
{
TabView tabView = (TabView) event.getComponent();
currentData.setSP_Index(tabView.getChildren().indexOf(event.getTab())+1);
}
<p:tabView id="tabView" styleClass="tabView">
<p:ajax event="tabChange" listener="#{dataAccess.onSPTabChange}" />
....
<script>
$("#tabView li:nth-child(#{currentData.SP_Index})").click();
</script>
public final void onTabChange(TabChangeEvent event) {
TabView tv = (TabView) event.getComponent();
this.ActiveIndex = tv.getChildren().indexOf(event.getTab());
}
public final void onTabChange(final TabChangeEvent event) {
TabView tv = (TabView) event.getComponent();
this.activeTabIndex = tv.getIndex();
}