如果从支持bean生成选项卡,则不会触发TabCloseEvent。 TabCloseEvent与普通的xhtml选项卡一起正常工作。
这是我的代码
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Test Title</title>
</h:head>
<h:body>
<h:form id="form">
<p:growl id="growl" showDetail="true" />
<p:tabView id="tabview"
value="#{TestBean.tabList}"
var="tab"
widgetVar="tabviewV">
<p:ajax event="tabClose" listener="#{TestBean.onTabCloseAction}" update=":form:growl"/>
<p:tab id="tab" title="#{tab}" closable="true" >
<h:outputText value="#{tab}"/>
</p:tab>
</p:tabView>
</h:form>
</h:body>
</html>
托管bean
@ManagedBean(name = "TestBean")
@ViewScoped
public class TestBean {
private List<String> tabList = new ArrayList<String>();
public TestBean() {
tabList.add("Test Tab 1");
tabList.add("Test Tab 2");
tabList.add("Test Tab 3");
tabList.add("Test Tab 4");
}
public void onTabCloseAction(TabCloseEvent event) {
System.out.println("Tab Closed Event : " + event.getTab().getTitle());
FacesMessage msg = new FacesMessage("Tab Closed", "Closed tab: " + event.getTab().getTitle());
FacesContext.getCurrentInstance().addMessage(null, msg);
}
public List<String> getTabList() {
return tabList;
}
public void setTabList(List<String> tabList) {
this.tabList = tabList;
}
}
我正在使用Primefaces 5.0。我也尝试在p:ajax中使用process =“@ this”但结果是相同的。
答案 0 :(得分:2)
我尝试了在展示中以及代码中提到的方式,但是没有完全正常工作,所以我尝试了另一种方法让我们看看
Facelets的
<p:growl id="growl" showDetail="true" />
<p:tabView id="tabView" binding="#{homeBean.tabView}" >
<p:ajax event="tabClose" listener="#{homeBean.onTabClose}" update=":form:growl"/>
</p:tabView>
Managed Bean
private TabView tabView = new TabView();
Tab tab1 = new Tab();
tab1.setClosable(true);
tab1.setTitle("Business Partner");
Tab tab2 = new Tab();
tab2.setClosable(true);
tab2.setTitle("Manage Favorites");
tabView.getChildren().add(tab1);
tabView.getChildren().add(tab2);
现在它似乎正在发挥作用。 注意:我使用的是Primefaces 5.0
答案 1 :(得分:1)