Primefaces 5.0标签关闭监听器无法正常工作

时间:2014-05-14 14:13:27

标签: jsf jsf-2 primefaces

如果从支持bean生成选项卡,则不会触发TabClos​​eEvent。 TabClos​​eEvent与普通的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”但结果是相同的。

2 个答案:

答案 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)

这是known bug

已经fixed in 5.0.2 version

因此,您应该将库更新为5.0.2或5.0.3