5

有谁知道如何添加一个按钮来添加位于最后创建的选项卡附近的新选项卡?如果不清楚我的意思,只需查看浏览器中的选项卡和添加新选项卡的按钮;-) 这正是我想要管理的。

我正在使用 MyFaces+PrimeFaces。

4

1 回答 1

6

您可以使用<p:tabView>显示基于某些 bean 集合的动态选项卡集。您可以将“添加”选项卡显示为选项卡集的最后一个选项卡。如有必要,您甚至可以采用不同的样式。您可以使用<p:ajax event="tabChange">挂钩选项卡更改侦听器,您可以在其中检查“添加”选项卡是否已打开,然后添加新选项卡。

例如

<h:form id="form">
    <p:tabView id="tabs" value="#{bean.tabs}" var="tab" widgetVar="w_tabs">
        <p:ajax event="tabChange" listener="#{bean.changeTab}" oncomplete="if (args.newTabIndex) w_tabs.select(args.newTabIndex)" />
        <p:tab title="#{tab.title}">
            <p>#{tab.content}</p>
        </p:tab>
    </p:tabView>
</h:form>

@ManagedBean
@ViewScoped
public class Bean implements Serializable {

    private List<Tab> tabs;

    @PostConstruct
    public void init() {
        // Just a stub. Do your thing to populate tabs.
        // Make sure that the last tab is the "Add" tab.
        tabs = new ArrayList<Tab>();
        tabs.add(new Tab("tab1", "content1"));
        tabs.add(new Tab("tab2", "content2"));
        tabs.add(new Tab("Add...", null));
    }

    public void changeTab(TabChangeEvent event) {
        int currentTabIndex = ((TabView) event.getComponent()).getActiveIndex();
        int lastTabIndex = tabs.size() - 1; // The "Add" tab.

        if (currentTabIndex == lastTabIndex) {
            tabs.add(lastTabIndex, new Tab("tab" + tabs.size(), "content" + tabs.size())); // Just a stub. Do your thing to add a new tab.
            RequestContext requestContext = RequestContext.getCurrentInstance();
            requestContext.update("form:tabs"); // Update the p:tabView to show new tab.
            requestContext.addCallbackParam("newTabIndex", lastTabIndex); // Triggers the oncomplete.
        }
    }

    public List<Tab> getTabs() {
        return tabs;
    }

}

在这个例子中,这个Tab类只是一个普通的 javabean,具有属性titlecontent. oncompletein是必要的<p:ajax>,因为添加新选项卡后选项卡内容会消失(毕竟这看起来很像 PF 错误;顺便说一下,我使用的是 3.3)。

于 2012-08-15T00:31:47.817 回答