我使用的是Primefaces 5和use,它有几个选项卡。
在每个选项卡中,我都有一个dataTable,它可以是可编辑的,也可以是不可编辑的,这取决于用户的操作。
如果用户正在编辑一行,我希望停留在相同的选项卡中,并防止选项卡更改,否则转到单击的选项卡。我该怎么做??
这是我的xhtml:
<p:tabView id="customerTab"
orientation="left"
dynamic="false"
cache="false"
widgetVar="detailsTab"
activeIndex="#{myBean.activTab}"
>
<p:ajax event="tabChange" listener="#{myBean.onTabChange}" update="customerTabv" />
<p:tab tab1> </p:tab>
<p:tab tab2> </p:tab>
这是我的支持bean:
public void onTabChange(
TabChangeEvent event) {
if (Tab.isInEditMode()) {
FacesMessage msg = new FacesMessage("Tab Changed", "Active Tab: " + event.getTab().getId()
+ "You can not change the tab when you are in Edit mode!");
FacesContext.getCurrentInstance().addMessage(null, msg);
this.messagesTab.setActiveIndex(0);
// // RequestContext.getCurrentInstance().execute("tabWidget.select(0)");
activTab = 0;
FacesContext.getCurrentInstance().setProcessingEvents(false);
} else {
TabView tabView = (TabView) event.getComponent();
int activeIndex = tabView.getChildren().indexOf(event.getTab());
this.messagesTab.setActiveIndex(activeIndex);
activTab = activeIndex;
}
}
发布于 2015-05-07 17:26:13
我在使用tabView和像dataTable这样的嵌套动态元素时遇到了很多问题。所以我现在只使用tabView作为触发器。这意味着tabView有选项卡,但选项卡中没有元素。我使用ajax侦听器来响应选项卡的更改,并更新UI中的特定区域,该区域显示了选项卡中应该包含的内容。对于您的问题,这可能是一个解决方案。您可以在编辑dataTable时忽略选项卡更改事件。或禁用具有选项卡禁用属性的其他选项卡。
发布于 2019-06-04 03:21:50
我的解决方案是一些javascript。要停止tabchange,请执行以下操作:
<p:tabView id="tabView" activeIndex="#{controller.tabSelected}" onTabChange="handleTabChange(index);return false;"
检查handleTabChange函数的primefaces_user_guide_6_2。
我还需要p:remoteCommand将新选择的选项卡发送到bean。
https://stackoverflow.com/questions/30096352
复制相似问题