问题描述
将我的 Web 应用程序移植到更新版本时,我遇到了来自 p:tabView UI 组件的 activeIndex 行为的奇怪故障。简短地说:在我现有的 Web 应用程序中,一切正常,在我的较新版本中,activeIndex 没有在支持 bean 上更新。两个网络应用程序使用相同的代码!还有相同的 java-libraries 和 Primefaces 版本 (8.0)。
xhtml 代码是:
<p:tabView id="TVMR"
styleClass="menuRight zw-fontFamily zw-green zw-fontnormal"
dynamic="true" cache="false" orientation="left"
widgetvar="tabViewMenuRight"
style="border: 0px solid black; padding: 0px !important;"
activeIndex="#{accViewer.tabIndex}">
<p:tab title="" disabled="true" id="tab0">
</p:tab>
<p:tab title="Accommodatie" id="tab1">
</p:tab>
<p:tab title="Location" id="tab2">
</p:tab>
......
<p:ajax event="tabChange" listener="#{accViewer.onChange}"
update="@this,accomMenuPanel,TVMR,cac010,cac020,cac030,cac040"
resetValues="true" />
</p:tabView>
java 代码为:
public void setTabIndex(int tabIndex) {
System.out.println(thisClassName + ": setTabIndex (1) - " + tabIndex);
this.tabIndex = tabIndex;
}
public void onChange(TabChangeEvent<TabChangeEvent> event) {
System.out.println(thisClassName + ": onChange (1) - " + event.getTab().getId());
if (AppUtils.isInteger(event.getTab().getId().substring(3))) {
int i = Integer.parseInt(event.getTab().getId().substring(3));
if (this.tabIndex != i) {
System.out.println(thisClassName + ": onChange (2) - " + i);
setTabIndex(i);
}
}
}
在我的新网站上,我不得不建立一个变通办法,让一切恢复正常。因此,如果 p:tabView 没有更新自动 tabIndex,它将由 onChange(TabChangeEvent 事件) 更新。在这里您可以看到两个 Web 应用程序的比较结果:
现有的网络应用程序显示:
viewer.AccViewer: setTabIndex (1) - 4
viewer.AccViewer: onChange (1) - tab4
新的网络应用程序显示:
viewer.AccViewer: setTabIndex (1) - 1
viewer.AccViewer: onChange (1) - tab4
viewer.AccViewer: onChange (2) - 4
viewer.AccViewer: setTabIndex (1) - 4
我的配置是:
Eclipse 18-12;
JDK v11.0;
Apache Tomcat (TomEE)/9.0.41 (8.0.6);
JSF2.3;
myfaces2.3;
Primefaces 8.0;
如果有人可以就可能导致这种意外行为的原因提供提示或解释,我将非常感激!解决这种类型的故障非常耗时,除非我自己犯了一些错误,否则我觉得 Primefaces 框架(我发现它是一个出色的工程 java UI 层!)应该更稳定一些。也许 Primefaces 可以调查一段时间,让 p:tabview tabIndex 服务器更新过程可靠!?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)