【问题标题】:Primefaces 5.0 tabs close listener not workingPrimefaces 5.0 选项卡关闭侦听器不起作用
【发布时间】:2014-07-02 15:47:52
【问题描述】:

如果选项卡是从支持 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" 但结果相同。

【问题讨论】:

    标签: jsf jsf-2 primefaces


    【解决方案1】:

    我尝试了展示中以及您的代码中提到的方式,但不能完全正常工作,所以我尝试了另一种方法让我们看看

    小脸

      <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>
    

    托管豆

        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

    【讨论】:

    • 谢谢 psi。它正在工作,但 event.getTab() 正在为空。知道如何获取已关闭选项卡的对象。我试过 event.getComponent() 和 event.getSource() 都返回 TabView 对象。
    • 是的,你可以使用 event.getTab() 来获取关闭标签的对象,我也可以使用它来获取它。
    【解决方案2】:

    这是known bug

    一直是fixed in 5.0.2 version

    所以你应该把你的库更新到 5.0.2 或 5.0.3

    【讨论】:

      猜你喜欢
      • 2013-02-07
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 2023-03-30
      • 2012-12-15
      • 2015-09-25
      相关资源
      最近更新 更多