AdfPage.PAGE.findComponentByAbsoluteId возвращает ноль - PullRequest
1 голос
/ 10 декабря 2011

Я пытаюсь выполнить некоторый JavaScript, когда идет процесс рендеринга страницы. Код:

    <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>

Но alert () показывает "null", и в итоге следующий ActionEvent.queue не выполняется.

Может кто-нибудь сказать мне, как я могу решить эту проблему?

1 Ответ

2 голосов
/ 12 декабря 2011

Похоже, вы нашли свое решение.

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>
...