gpt4 book ai didi

xpages - 自定义控件的复合数据在 beforeRenderResponse 事件中未定义

转载 作者:行者123 更新时间:2023-12-04 18:45:48 25 4
gpt4 key购买 nike

将数据传递给自定义控件时,我一直使用compositeData 对象从控件内部访问这些数据。这工作正常,除了自定义控件的 beforeRenderResponse 事件。以这段代码为例:

<xp:this.afterPageLoad><![CDATA[#{javascript:getComponent("lbl0").setValue(typeof(compositeData));}]]></xp:this.afterPageLoad>
<xp:this.beforeRenderResponse><![CDATA[#{javascript:getComponent("lbl1").setValue(typeof(compositeData));}]]></xp:this.beforeRenderResponse>
<xp:label value="" id="lbl0"/>
<xp:label value="" id="lbl1"/>

在 afterPageLoad 事件中,compositeData 的 typeof 是“com.ibm.xsp.binding.PropertyMap”。然而在 beforeRenderResponse 事件中,相同的 typeof 返回“未定义”。

如何访问 beforeRenderResponse 事件中的复合数据?

最佳答案

在 beforePageLoad 或 afterPageLoad 中创建一个引用复合数据的 SSJS 变量:

<xp:this.beforePageLoad>
<![CDATA[#{javascript:
var hlp=compositeData;
}]]>
</xp:this.beforePageLoad>

这允许您在渲染阶段访问 PropertyMap。如果您有属性测试,则可以通过以下方式访问它:
<xp:this.afterRenderResponse>
<![CDATA[#{javascript:
print( hlp.test );
}]]>
</xp:this.afterRenderResponse>

编辑:
这仅在页面打开 (pageLoad) 时有效。如果刷新页面,这将不起作用。如果它必须在部分刷新的情况下运行,您必须这样做:

首先,您必须向自定义控件添加一个 ID:
<xc:ccWithId test="I am your property" id="ccWithId" />

这允许您使用 getComponent() 作为常规组件访问自定义控件。现在您可以在自定义控件的事件中访问组件的 propertyMap,该事件包含您想要的变量:
<xp:this.beforeRenderResponse>
<![CDATA[#{javascript:
var cmp:com.ibm.xsp.component.UIIncludeComposite = getComponent("ccWithId");
print("Value of 'test' -> " + cmp.getPropertyMap().getString("test") )
}]]>
</xp:this.beforeRenderResponse>

由 xpages-noob 编辑 :上面的示例适用于静态自定义控件属性。但是,在计算属性的情况下,属性映射的各种 get 函数返回值绑定(bind)对象而不是值本身。因此,可以使用以下功能作为解决方法:
 var thisData:com.ibm.xsp.binding.PropertyMap=getComponent("ccWithId").getPropertyMap();
function getPara(key) {
var x=thisData.get(key);
if (@Ends(typeof(x),"ValueBinding")) return x.getValue(facesContext);
else return x
}

例如,如果您想获取属性“test”,请调用 getPara("test")。返回值应等于compositeData.test。

关于xpages - 自定义控件的复合数据在 beforeRenderResponse 事件中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14790336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com