You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle ADF如何向af:resource中的JS注入动态参数

Oracle ADF 动态注入EL值至JavaScript的解决方案

针对你遇到的直接在<af:resource>中使用EL表达式引发解析错误的问题,以下三种可行方案供你选择:

方法一:通过clientListener传参调用函数

调整点击事件的函数调用方式,直接将动态EL值作为参数传入JS函数,避免在<af:resource>块中写入EL:

页面代码修改

<af:resource type="javascript">
var chatSettings = {};
function init(url, id){
    // 为变量赋值动态参数
    chatSettings.url = url;
    chatSettings.id = id;
    // 原有init逻辑
    ...
}
</af:resource>

<af:image id="abc">
    <af:clientListener method="function(){init('#{attrs.url}', '#{attrs.id}');}" type="click"/>
</af:image>

ADF会在渲染页面时解析#{attrs.url}和#{attrs.id}为实际值,点击图片时将动态参数传入init函数完成赋值。

方法二:用隐藏组件存储动态值,JS读取

通过客户端可访问的隐藏组件存储动态值,JS中调用ADF客户端API读取:

页面代码修改

<!-- 存储动态值的隐藏组件,需开启clientComponent -->
<af:inputHidden id="hdnUrl" value="#{attrs.url}" clientComponent="true"/>
<af:inputHidden id="hdnId" value="#{attrs.id}" clientComponent="true"/>

<af:resource type="javascript">
var chatSettings = {};
function init(){
    // 通过ADF客户端API获取组件值
    var url = AdfPage.PAGE.findComponentByAbsoluteId('hdnUrl').getValue();
    var id = AdfPage.PAGE.findComponentByAbsoluteId('hdnId').getValue();
    chatSettings.url = url;
    chatSettings.id = id;
    // 原有init逻辑
    ...
}
</af:resource>

<af:image id="abc">
    <af:clientListener method="init" type="click"/>
</af:image>

方法三:用<af:outputScript>替代<af:resource>

若需要在页面加载时就完成chatSettings的赋值,可使用支持EL解析的<af:outputScript>标签:

页面代码修改

<af:outputScript type="text/javascript">
var chatSettings = {
    url: "#{attrs.url}",
    id: "#{attrs.id}"
};
function init(){
    // 原有init逻辑
    ...
}
</af:outputScript>

<af:image id="abc">
    <af:clientListener method="init" type="click"/>
</af:image>

<af:outputScript>会在页面渲染阶段解析其中的EL表达式,直接生成包含动态值的JS代码。

注意事项

  • 若动态值包含引号、斜杠等特殊字符,需使用EL函数转义,例如#{fn:escapeXml(attrs.url)},避免引发JS语法错误。

内容的提问来源于stack exchange,提问作者Sourabh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 22:25:00