0

我的页面布局(w/Primefaces)有一个包含所有内容的西、北和中心布局面板。中心布局包括一个 iframe,每次选择菜单选项(在西面板上)时,仅更新中心内容(使用 Ajax)。

在页面呈现/加载时,我想在其他面板之一上显示“加载 gif”。我使用了以下代码:

xhtml 段

 <p:ajaxStatus style="width:32px; height:32px;" id="ajaxStatusPanel">
            <f:facet name="start">
                <p:graphicImage value="/resources/img/progress.gif" />
            </f:facet>

            <f:facet name="complete">
                <h:outputText value="" />
            </f:facet>
    </p:ajaxStatus>

但这会短暂显示加载程序,因为它会在 ajax 请求结束后立即完成。但是页面加载/渲染可能需要更长的时间。有没有办法提供“页面呈现”回调?

4

1 回答 1

1

当您在 中实际加载内容iframe时,您可以通过向页面添加一点 javascript,尤其是onload事件处理程序来解决此问题。

例如:

<iframe id="navigation" src="#{layout.navigation}" onload="hideDialog()"
style="position: absolute; top: 0px; left: 0px; bottom: 0px; right: 0px; width: 100%; height: 100%; border: none; margin: 0; padding: 0; overflow: hidden; z-index: 999999;">
</iframe>

上面的代码将导致hideDialog()函数在iframe加载完成后执行。

您调用的函数(例如hideDialog())可以包含对 JSF/primefaces 生成的对话框的引用并将其隐藏。

<script>
function hideDialog()
{
if(statusDialog != undefined)
statusDialog.hide();
}
</script>

您可能需要在生成的 html+javascript 中进行一些搜索,以找到要使用的确切名称/ID(以获得对对话框的引用)。

于 2013-06-20T13:09:25.603 回答