我正在尝试在页面渲染过程中执行一些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。
有谁能告诉我如何解决这个问题?
答案 0 :(得分: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>