Primefaces 5.0标签关闭监听器不工作



如果选项卡是从后台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。我也尝试使用process="@this"在边p:ajax,但结果是相同的。

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

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>

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

这是一个已知的bug。

已在5.0.2版本中修复。

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

相关内容

  • 没有找到相关文章

最新更新