选项卡内的 Primefaces 对话框不适用于 modal="true" 和appendto="@body"

问题描述 投票:0回答:1

当对话框不在任何选项卡内时,它们可以正常工作。但是我在选项卡内有一些页面,并且在这些页面中,如果我设置 modal="true" 和 @appendto="@body",我看不到在 bean 的对话框中完成的更改。但如果我设置 modal="false",则更改工作正常,只是我希望我的对话框是模态的。谁能建议该怎么做? 我有一个主页,其中定义了选项卡

  <p:tabView dynamic="true" cache="false" id="tabView" style="margin-top:30px;">
                    <p:ajax event="tabChange"                           
                            listener="#{bean.onTabChange}"/>
                    
                    <p:tab id="homeTab" title="Account">
                        <ui:include src="work/tab1.xhtml"/>
                    </p:tab>
                    
                    <p:tab id="Tab1" title="Payments">
                        <ui:include src="work/tab2.xhtml"/>
                    </p:tab>
                </p:tabView>

在 tabView、tab1.xhtml 中,我有一个对话框,其中包含输入文本、selectOneMenu 和要编辑的数据表。 每当我添加任何值或更改时,我都会看到更改的值没有保存在 bean 中。 我必须添加一个ajax事件更改侦听器并在bean中获取更改后的vaklue,如下所示

<p:selectOneMenu value="#{bean.name}" styleClass="menu" update= "@this" panelStyleClass="panel"
                                     style="width:255px;background-color:#E5FBFF;color:#0E66EE;font-family:Verdana, Geneva, sans-serif;">
                        <f:selectItem itemLabel="Select One" itemValue="" />
                        <f:selectItems value="#{bean.name}" />
                        <p:ajax event="change" partialSubmit="true"  update= "@this" listener="#{bean.nameChangeListener}"/>
        </p:selectOneMenu>

在bean中监听器如下,

public void nameChangeListener (AjaxBehaviorEvent event) {
        Object val = ((UIInput)event.getSource()).getValue();
        name = (String)val;
     
    }

完成这一切之后,即使我将对话框设置为模式并添加appendTo =“@(body)”,我也可以看到更改并且可以保存它们

现在的问题是更改数据表。我只有一个需要更改的单元格中有一个下拉菜单,但我不知道如何知道更改了哪一行。因为我必须将整行保存在数据库中。请帮忙。

我还有另一个对话框,其中只有一个数据表,所有列都可以编辑。我想知道如何知道已进行更改的行

primefaces modal-dialog tabview
1个回答
0
投票

按照@melloware的建议,我可以通过将对话框以新形式移动到单独的xhtml文件中来解决它,如下所示。

<h:form id="pForm">
    
    <p:dialog  dynamic="true" header="Add" widgetVar="testDialog" resizable="false" showHeader="true" closable="true"  width="58%" height="100%" modal="true">
          <!-- ****************Dialog Content*************** -->
      update=:mform:AddGrid  <!-- ****This is on my main xhtml page**** -->
      </p:dialog>
   </h:form>

我必须将此文件包含在定义了所有选项卡视图的文件中。 见下文

 <h:form id=mform>
     <p:tabView dynamic="true" cache="false" id="tabView" style="margin-top:30px;">
             <p:ajax event="tabChange"                           
                listener="#{bean.onTabChange}"/>
                    
             <p:tab id="homeTab" title="Account">
                 <ui:include src="work/tab1.xhtml"/>
             </p:tab>
                    
             <p:tab id="Tab1" title="Payments">
                 <ui:include src="work/tab2.xhtml"/>
             </p:tab>
         </p:tabView>
     </h:form>
 <ui:include src="dialogs.xhtml"/>
© www.soinside.com 2019 - 2024. All rights reserved.