P:对话框不显示在tabview的选项卡中

p:dialog not showing in tabs on tabview

本文关键字:选项 tabview 对话框 显示      更新时间:2023-09-26

我在JSF2 Primefaces 5.2中遇到了一个奇怪的问题。这可以使用下面的代码轻松地复制。

我正在使用p:命令按钮的onclick创建一个选项卡内的对话框(在tabview内)。第一个标签,它工作得很好。动态添加新选项卡后(使用p:tabView的value属性),对话框在第二个选项卡上也能正常工作。

但是,如果我再次点击第一个选项卡并点击命令按钮,整个页面就会变暗,我无法点击屏幕上的任何地方。

任何想法?谢谢你。

                <p:panel header="materials Pages" id="materialsPagesPanel">
            <p:commandButton value="+ Add material Page" id="addmaterialPage"
                                action="#{guideBean.addmaterialPage}" ajax="true" process="@this" update="createGuideForm"/>
        <p:tabView value="#{guideBean.materialComboList}" var="materialCombo" orientation="left" id="materialsTabs" activeIndex="#{guideBean.materialActiveTab}">
            <p:tab title="material Page #{materialCombo.pageNumber}">
                <div class="materialPageHeading"><h:outputText value="material Page #{materialCombo.pageNumber}"/></div>   
                <p:commandButton id="pickmaterialsButton" type="button" onclick="PF('dlg').show();" value="Pick materials" process="@this"/> 
                <p:dialog header="Search for materials" widgetVar="dlg" modal="true" width="900" height="600" resizable="false">
                        Testing
                    <br />
                    <p:commandButton value="Select" process="@this"
                                 action="#{guideBean.savematerialsFromPickList(materialCombo.pageNumber)}"
                                 oncomplete="PF('dlg').hide()">
                        </p:commandButton>
                </p:dialog>

            </p:tab>
        </p:tabView>

        </p:panel>

支持bean中动态添加制表符的代码:

    public String addmaterialPage() 
{
    MaterialCombo materialCombo = new MaterialCombo();
    //materialComboList is a class variable
    materialComboList.add(materialCombo);
    return "";
}

问题是widgetVar属性创建了一个全局范围的javascript变量,所以你必须以这样的方式修改你的页面代码:

           <p:panel header="materials Pages" id="materialsPagesPanel">
        <p:commandButton value="+ Add material Page" id="addmaterialPage"
                            action="#{guideBean.addmaterialPage}" ajax="true" process="@this" update="createGuideForm"/>
    <p:tabView value="#{guideBean.materialComboList}" var="materialCombo" orientation="left" id="materialsTabs" activeIndex="#{guideBean.materialActiveTab}">
        <p:tab title="material Page #{materialCombo.pageNumber}">
            <div class="materialPageHeading"><h:outputText value="material Page #{materialCombo.pageNumber}"/></div>   
            <p:commandButton id="pickmaterialsButton" type="button" onclick="PF('dlg#{materialCombo.pageNumber}').show();" value="Pick materials" process="@this"/> 
            <p:dialog header="Search for materials" widgetVar="dlg#{materialCombo.pageNumber}" modal="true" width="900" height="600" resizable="false">
                    Testing
                <br />
                <p:commandButton value="Select" process="@this"
                             action="#{guideBean.savematerialsFromPickList(materialCombo.pageNumber)}"
                             oncomplete="PF('dlg#{materialCombo.pageNumber}').hide()">
                    </p:commandButton>
            </p:dialog>

        </p:tab>
    </p:tabView>

    </p:panel>