Jsf Primefaces 5.0选项卡关闭侦听器不工作
如果从支持bean生成制表符,则不会触发TabCloseEvent。 TabCloseEvent与普通xhtml选项卡配合使用效果良好 这是我的密码Jsf Primefaces 5.0选项卡关闭侦听器不工作,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,如果从支持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>
<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;
}
}
@ManagedBean(name=“TestBean”)
@视域
公共类TestBean{
私有列表tabList=新的ArrayList();
公共TestBean(){
表格列表添加(“测试表1”);
表格列表添加(“测试表2”);
表格列表添加(“测试表3”);
表格列表添加(“测试表4”);
}
公共无效onTabCloseAction(TabCloseEvent事件){
System.out.println(“制表符关闭事件:+Event.getTab().getTitle());
FacesMessage msg=新的FacesMessage(“Tab Closed”,“Closed Tab:”+event.getTab().getTitle());
FacesContext.getCurrentInstance().addMessage(null,msg);
}
公共列表getTabList(){
返回小报;
}
公共无效设置列表(列表列表列表){
this.tabList=tabList;
}
}
我用的是PrimeFaces5.0。此外,我还尝试在p:ajax中使用process=“@this”,但结果是一样的。我尝试了showcase和您的代码中提到的方法,但没有完全起作用,所以我尝试了另一种方法让我们看看 小脸
<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>
现在它似乎起作用了。
注意:我使用了Primefaces 5.0,这是一个
它一直是
因此,您只需将库更新为5.0.2或5.0.3即可。它正在工作,但event.getTab()正在变为null。我试过event.getComponent()和event.getSource()都返回TabView对象。你可以使用event.getTab()获得closed tab的对象。我使用相同的方法得到它。
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);