【问题标题】:Dialog gets closed on ajax calls对话框在 ajax 调用时关闭
【发布时间】:2015-02-06 08:49:59
【问题描述】:

我正在使用 Primefaces。我在对话框中有一个数据表,当我尝试对其进行排序/过滤时,对话框关闭。我假设每当进行 ajax 调用时,它都会关闭对话框。我还尝试制作一个“测试”示例按钮,它也关闭了对话框。 有没有办法防止这种情况发生?

<p:outputPanel autoUpdate="true" deferredMode="true" deferred="visible">
    <p:dialog height="700px" width="100%" closable="true" closeOnEscape="true" header="Sample table" widgetVar="sampleDialog" modal="true" showEffect="fade" hideEffect="fade" resizable="false">   
        <h:form>
            <p:dataTable    id="fooTableCurrent" 
                            var="business" 
                            value="#{mainViewController.lazyModel}"
                            paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
                            paginator="true" rows="20" style="width: 100%; text-align: center;"
                            rowsPerPageTemplate="10,20,50,100,200"
                            emptyMessage="No records found with given criteria"
                            editable="true"
                            lazy="true"
                            scrollable="true"
                            scrollHeight="100px">


                <p:ajax event="rowEdit" listener="#{mainViewController.onBusinessRowEdit}"  />
                <p:ajax event="rowEditCancel" listener="#{mainViewController.onBusinessRowCancel}" />

                <p:column headerText="Employee reg. #">
                    <h:outputText value="#{business.employee.employee_ID}" />
                </p:column>

                <p:column headerText="Employee">
                    <h:outputText value="#{business.employee.name}" />
                </p:column>

                <p:column headerText="Bank">
                    <h:outputText value="#{business.bank.name}" />
                </p:column>

                <p:column headerText="Office" filterStyle="width:60px;" filterBy="#{business.office.office_ID}" filterMatchMode="contains">
                    <h:outputText value="#{business.office.name}" />
                </p:column>

                <p:column headerText="Product group" style="width: 100px;">
                    <h:outputText value="#{business.product.product_group.name}" />
                </p:column>

                <p:column headerText="Product" filterStyle="width:60px;" filterBy="#{business.product.product_ID}">
                    <h:outputText value="#{business.product.name}" />
                </p:column>

                <p:column headerText="Contract" filterStyle="width:60px;" filterBy="#{business.contract}">
                    <h:outputText value="#{business.contract}" />
                </p:column>

                <p:column headerText="Value" sortBy="#{business.value}">
                    <p:cellEditor>
                        <f:facet name="output"><h:outputText value="#{business.value}" /></f:facet>
                        <f:facet name="input"><h:inputText value="#{business.value}" /></f:facet>
                    </p:cellEditor>
                </p:column>

                <p:column headerText="Date" sortBy="#{business.insert_date}">
                    <h:outputText value="#{business.insert_date}" />
                </p:column>

                <p:column headerText="Approved" width="55" style="text-align: center;">
                    <p:selectBooleanCheckbox disabled="true" value="#{true}" />
                </p:column>

                <p:column style="width:32px" headerText="Edit">
                    <p:rowEditor />
                </p:column>

                <p:column headerText="Delete" width="30">
                    <p:commandButton icon="ui-icon-close" actionListener="#{mainViewController.deleteBusiness(business)}" update="@form">
                        <p:confirm header="Confirmation" message="Are you sure?" icon="ui-icon-alert" />
                    </p:commandButton>

                    <p:confirmDialog global="true" showEffect="fade" hideEffect="fade">
                        <p:commandButton value="Yes" type="button" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
                        <p:commandButton value="No" type="button" styleClass="ui-confirmdialog-no" icon="ui-icon-close" />
                    </p:confirmDialog>

                </p:column>
            </p:dataTable>
        </h:form>
    </p:dialog>
</p:outputPanel>

【问题讨论】:

  • 这段代码很吵。删除“员工”列后问题是否消失?不?请从您的代码 sn-p 中省略它。删除paginatorTemplate 后问题会消失吗?不?请从您的代码 sn-p 中省略它。删除scrollable="true" 后问题会消失吗?不?请从您的代码 sn-p 中省略它。仔细阅读stackoverflow.com/help/mcve 并相应地解决您的问题。顺便说一句,我最好的猜测是嵌套形式。

标签: jsf-2 primefaces modal-dialog


【解决方案1】:

问题出在 outputPanel 标记中。删除 autoUpdate="true"everything 后,一切都像魅力一样发挥作用。

【讨论】:

  • 感谢您的回答。我看到你现在在问题中添加了这个,下次请从一开始就创建一个mcve
【解决方案2】:

您可以使用属性oncomplete = 'PF.show('WIDGET_VAR_NAME)' 来强制对话框再次显示。

【讨论】:

  • 这是一种解决方法(补偿),而其他答案修复(消除)原因。
  • 就我而言,我在没有任何autoUpdate="true" 的情况下检索了问题。我发布了我的解决方案,因为它对我有用。
  • 好的,感谢您的澄清,但如果您在没有autoUpdate="true" 的情况下遇到问题(并在对话框之外明确更新了某些内容),那么您实际上遇到了具有相同表现形式的不同“问题”跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 2020-01-23
相关资源
最近更新 更多