进展信息

时间:2014-10-17 09:49:37

标签: oracle-adf

如何添加进度消息,例如"获取数据"务实。当获取数据时,我需要在空白页面上显示此消息。我是ADF的新手,所以请原谅我,如果它是一些非常基本的东西。我无法在网上找到它。

2 个答案:

答案 0 :(得分:2)

您可以在页面或页面碎片中使用javascript。我的示例使用页面片段,因此弹出窗口的id必须包含该区域。如果您无法找到正确的ID,可以从任何浏览器查找,使用View Source,并搜索您给它的名称(在本例中为splashPopup)。

    <af:resource type="javascript">
      function enforcePreventUserInput(evt) {
          var popup = AdfPage.PAGE.findComponentByAbsoluteId('pt1:r1:0:splashPopup');
          if (popup != null) {
              AdfPage.PAGE.addBusyStateListener(popup, handleBusyState);
              evt.preventUserInput();
          }
      }

      function handleBusyState(evt) {
          var popup = AdfPage.PAGE.findComponentByAbsoluteId('pt1:r1:0:splashPopup');
          if (popup != null) {
              if (evt.isBusy()) {
                  popup.show();
              }
              else if (popup.isPopupVisible()) {
                  popup.hide();
                  AdfPage.PAGE.removeBusyStateListener(popup, handleBusyState);
              }
          }
      }
    </af:resource>

pageFragment中的弹出窗口。它显示旋转圆的简单gif动画。如果你需要谷歌,你可以找到许多其他动画。

<af:popup id="p1" contentDelivery="immediate">
                    <af:dialog id="d2" type="none" closeIconVisible="false" title="Loading">
                        <af:panelGroupLayout id="pgl5" layout="vertical" halign="center">
                            <af:image source="/images/loading.gif" shortDesc="Loading data..." id="i1"/>
                        </af:panelGroupLayout>
                    </af:dialog>
</af:popup>

现在,我认为您需要在按下按钮或图像链接后,在长时间运行的查询或其他一些长时间运行的过程中显示弹出窗口。为此,您必须在组件上定义一个clientListener,它使用上面定义的javascript方法。

<af:commandImageLink text="Test LongRunning Query" id="cil1" icon="/icons/excel.jpg"
                                         action="#{myBean.doStuff}"
                      <af:clientListener method="enforcePreventUserInput" type="action">
                      </af:clientListener>
</af:commandImageLink>

答案 1 :(得分:1)

如果您有一个长时间运行的方法调用,那么您可以在页面加载

上调用该方法
<af:serverListener type="onloadEvent"
                         method="#{backingBeanScope.initBean.callMethod}"/>
 <af:clientListener type="load" method="triggerOnLoad"/>
 <af:resource type="javascript">
        function triggerOnLoad(event)
        {
          AdfCustomEvent.queue(event.getSource(), "onloadEvent", {},false);
          return true;
        }
  </af:resource>

然后使用adf状态指示器显示页面上的状态。

<af:panelStretchLayout id="psl1" startWidth="33%" endWidth="33%"
                                   topHeight="33%" bottomHeight="33%">
          <f:facet name="bottom"/>
          <f:facet name="center">
            <af:statusIndicator id="si1"/> 
          </f:facet>
          <f:facet name="start">
            <af:panelGroupLayout id="pgl2"/>
          </f:facet>
          <f:facet name="end">
            <af:panelGroupLayout id="pgl3"/>
          </f:facet>
          <f:facet name="top">
            <af:panelGroupLayout id="pgl4"/>
          </f:facet>
</af:panelStretchLayout>

有关更多详细信息,请参阅此博客文章 Show status indicator for long running method calls - ADF