Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多次打开对话框会慢慢增加浏览器内存_Java_Javascript_Jsf_Primefaces_Memory Leaks - Fatal编程技术网

Java 多次打开对话框会慢慢增加浏览器内存

Java 多次打开对话框会慢慢增加浏览器内存,java,javascript,jsf,primefaces,memory-leaks,Java,Javascript,Jsf,Primefaces,Memory Leaks,我使用的是PrimeFaces4.0、JSF2.1.11 我有一个页面,页面上有一个按钮,该按钮调用prime faces dialog.show(),填写后会出现一个对话框,单击“完成”,它会用添加到prime faces数据表中的新项刷新页面。每次我点击按钮打开对话框并填写完毕后,我的浏览器内存就会增加。在自动化测试中,一旦对话框被打开125次(我们的用户可以连续打开多达800次),浏览器就会耗尽内存。在IE8中,125项的内存使用率为880MB 所以我的问题是如何防止这种情况 更多信息:b

我使用的是PrimeFaces4.0、JSF2.1.11

我有一个页面,页面上有一个按钮,该按钮调用prime faces dialog.show(),填写后会出现一个对话框,单击“完成”,它会用添加到prime faces数据表中的新项刷新页面。每次我点击按钮打开对话框并填写完毕后,我的浏览器内存就会增加。在自动化测试中,一旦对话框被打开125次(我们的用户可以连续打开多达800次),浏览器就会耗尽内存。在IE8中,125项的内存使用率为880MB

所以我的问题是如何防止这种情况

更多信息:bean是可视范围的,使用Glassfish 3,这个问题在所有浏览器中都会发生,但在旧浏览器中更糟

我已采取的步骤: 1.我每次都在对话框上执行.show().hide()。 2.我尝试调用javascript来清空DOM中的div,但没有成功

我查看了primefaces问题,没有看到任何内存泄漏报告,而且如果我让页面打开,内存不会上升,只有在我使用页面并打开和关闭对话框时才会上升

更新:

这里有一些代码

这个表单在另一个表单之外

  <h:form id="lineItemForm">
        <p:dialog id="addLineItemDialogId" widgetVar="lineItemDialog" header="Line item" width="900" resizable="false"
          modal="true" showEffect="fade">

... 
...


             <p:commandLink value="Done"
                            onclick="actionStarted($(this))"
                            action="#{lineItemView.save}"
                            update=":wizardForm:lineItemWizardPanel"
                            oncomplete="actionComplete(); saveLineItem(args);"/>

    </h:form>

... 
...
saveLineItem(args)是一个javascript方法,在验证检查后调用.hide()

下面是对.show()的调用,它的格式为wizardForm

    <h:form id="wizardForm"/>
...
...
          <p:commandLink value="Add Item"
                        action="#{lineItemView.loadLineItemFromRequest(requisitionView.request)}"
                        process="@this"
                        update=":lineItemForm"
                        oncomplete="lineItemDialog.show()"/>

...
...
更新因此它最终变成了一个红色的hering。我删除了后端方法调用,内存泄漏消失了。看起来是数据表引起了问题,使用ajax。向上看,它被固定在5个面上

我会猜一猜,虽然我不确定。尝试按如下方式构造代码:

<h:body>
    <h:form id="mainForm">
        ...
        ...
        ...
        ...
    </h:form>

    <p:dialog>
        <h:form id="dialogForm">
            ...
        </h:form>
    </p:dialog>
</h:body>

...
...
...
...
...
在用于显示对话框的按钮上,使用
update=“dialogForm”


我相信如果你
更新
对话框本身或它的父对话框之一,它可能会导致几个对话框相互隐藏。这也许可以解释内存使用情况。此外,最好的做法是将对话放在主体形式之外

你有任何代码可以共享吗?我会检查这种行为是否也发生在我身上。我正在使用dialog存储和显示大量数据,并对每个数据表行进行详细说明。在显示对话框之前,是否更新对话框(或对话框的父级)?我的对话框没有问题,我正在更新相同的对话框,单击某个数据表行。是的,我在显示对话框之前更新对话框所在的表单,该对话框的形式与调用show()的commandLink和显示结果的dataTable不同