2011-12-10 33 views
1

我想在頁面呈現過程正在執行時執行一些JavaScript。 的代碼是:AdfPage.PAGE.findComponentByAbsoluteId返回null

<af:document title="Page1" id="d1"> 
     <af:resource type="javascript" source="/resources/js/jquery-1.3.2.js"/> 
     <af:form id="f1"> 
      <af:panelStretchLayout id="psl1"> 
       <f:facet name="center"> 
        <af:panelGroupLayout id="pgl1">        
         <af:panelGroupLayout id="main" styleClass="AFStretchWidth" layout="vertical" clientComponent="true"> 
          <af:clientListener method="onMainClick" type="click"/> 
      <af:serverListener type="clickOnMain" method="#{bean.someMethod}"/> 
         </af:panelGroupLayout>         
        </af:panelGroupLayout> 
       </f:facet> 
      </af:panelStretchLayout> 

      <af:resource type="javascript"> 
     var main = AdfPage.PAGE.findComponentByAbsoluteId('main'); 
     alert(main); 
     if(main != null) { 
      ActionEvent.queue(main, true); 
     } 
      </af:resource> 
    <af:resource type="javascript"> 
     onMainClick = function (event) { 
      AdfCustomEvent.queue(event.getSource(), "clickOnMain", {}, true); 
     } 
      </af:resource> 
     </af:form>    
    </af:document> 

但警報()是顯示「空」,並最終在未來ActionEvent.queue不執行。

誰能告訴我我該如何解決這個問題?

回答

2

看起來像你找到你的解決方案。

https://forums.oracle.com/forums/thread.jspa?threadID=2319943

<?xml version='1.0' encoding='UTF-8'?> 
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:f="http://java.sun.com/jsf/core" xmlns:af="http://xmlns.oracle.com/adf/faces/rich"> 
    <jsp:directive.page contentType="text/html;charset=UTF-8"/> 
    <f:view> 
    <af:document title="Page1" id="d1" clientComponent="true"> 
     <af:resource type="javascript" source="/resources/js/jquery-1.3.2.js"/> 
     <af:form id="f1"> 
     <af:panelStretchLayout id="psl1"> 
      <f:facet name="center"> 
      <af:panelGroupLayout id="pgl1"> 
       <af:panelGroupLayout id="main" styleClass="AFStretchWidth" layout="vertical" clientComponent="true"> 
       <af:clientListener method="onMainClick" type="click"/> 
       <af:serverListener type="clickOnMain" method="#{college.onLoad}"/> 
       </af:panelGroupLayout> 
      </af:panelGroupLayout> 
      </f:facet> 
     </af:panelStretchLayout> 
     </af:form> 
     <af:resource type="javascript"> 
     onBodyLoad = function (event) { 
      fireEvent(document.getElementById(AdfPage.PAGE.findComponentByAbsoluteId('main').getClientId()), 'click'); 
     } 
     fireEvent = function (element, eventType) { 
      if (element.fireEvent) { 
       element.fireEvent('on' + eventType); 
      } 
      else { 
       var eventObj = document.createEvent('Events'); 
       eventObj.initEvent(eventType, true, false); 
       element.dispatchEvent(eventObj); 
      } 
     } 
     onMainClick = function (event) { 
      AdfCustomEvent.queue(event.getSource(), "clickOnMain", 
      { 
      },true); 
     } 
     </af:resource> 
     <af:clientListener method="onBodyLoad" type="load"/> 
    </af:document> 
    </f:view> 
</jsp:root> 
+0

是的,我發現了它。我在代碼中進行的一項修改是,使用navigator.userAgent添加驗證,以驗證fireEvent中的MSIE。 –