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

自定义控件:如何在onClientLoad中获取compositeData

在CSJS中获取自定义控件的needsLogout属性

当然可以实现,核心思路是把服务器端的compositeData属性值传递到客户端JS环境——因为CSJS运行在浏览器端,没法直接访问服务器端的compositeData对象。这里提供两种常用方案:

方案一:直接在CSJS中嵌入SSJS表达式解析属性值

在自定义控件的onClientLoad事件里,用XPage的表达式语言直接把compositeData.needsLogout的值解析成客户端JS能识别的布尔值,再判断执行超时逻辑:

// 从服务器端获取needsLogout属性值,渲染时会被解析为true/false
var enableTimeout = #{javascript:compositeData.needsLogout};

if (enableTimeout) {
    var thisUrl = window.location.pathname;
    var finalPath = thisUrl + "?Logout&redirectto=" + thisUrl + "?opendatabase&login";
    setAutoRefresh(15000, finalPath);
}

原理:服务器渲染页面时,会把#{javascript:compositeData.needsLogout}解析成对应的布尔值(true或false),输出到客户端JS代码中,CSJS就能直接用这个值判断是否执行逻辑。

方案二:通过DOM元素中转属性值

如果需要更灵活的传递方式(比如属性值需复用或可能动态变化),可以把属性值存到页面隐藏控件里,再用CSJS读取:

  1. 在自定义控件中添加绑定到compositeData.needsLogout的隐藏输入框:
<xp:inputText 
    id="hdnNeedsLogout" 
    type="hidden" 
    value="#{compositeData.needsLogout}"
></xp:inputText>
  1. 在onClientLoad的CSJS中读取该隐藏控件的值:
// 用#{id:...}获取控件的客户端ID,避免命名冲突
var hdnElement = document.getElementById("#{id:hdnNeedsLogout}");
var enableTimeout = hdnElement && hdnElement.value === "true";

if (enableTimeout) {
    var thisUrl = window.location.pathname;
    var finalPath = thisUrl + "?Logout&redirectto=" + thisUrl + "?opendatabase&login";
    setAutoRefresh(15000, finalPath);
}

两种方案都能满足需求:方案一更简洁直接,适合简单布尔值传递;方案二更适合多场景复用属性值或处理复杂类型的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:03:26