我在我的一个应用程序中使用以下内容将函数传递给自定义控件:
1)在自定义控件中,添加一个属性,该属性将在我们的操作按钮中保存要执行的功能。我会打电话给我的'querySave'。属性类型必须是“javax.faces.el.MethodBinding”。编辑器必须是“方法绑定编辑器”。
2)。以下是此示例的自定义控件中操作按钮背后的代码:
if (compositeData.querySave) if (!compositeData.querySave.call()) return;
currentDocument.save();
这表示:如果在属性“querySave”中定义了一个函数,请调用它。如果函数返回 false,则不要保存文档。
3) 定义一个 SSJS 函数来执行您需要操作按钮执行的操作。我通常把我的放在一个 SSJS 库中。确保 XPage 可以访问该函数。
4) 在包含此控件的 XPage 中,使用我们在步骤 1 中创建的属性的编辑器(本示例中为 querySave)并输入您在步骤 3 中创建的函数的名称。重要提示:不要添加括号或参数当您输入函数名称时 - 如果输入,函数将在加载时执行,而不是在您单击操作按钮时执行。另外,不要将任何代码直接添加到编辑器中,只需添加函数名称即可。此编辑器中的任何代码也将在加载时执行。
感谢Bill Hanson 对专家交流的回答。
--
更新:
这是具有自定义属性的此类自定义控件的具体示例,其中所讨论的 SSJS 函数称为 validateDocument:
<xc:component_buttons>
<xc:this.validateFunctionName><![CDATA[#{javascript:validateDocument}]]></xc:this.validateFunctionName>
</xc:component_buttons>
下面是调用该函数的自定义控件中的按钮示例:
<xp:button id="submit" value="Save">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action>
<xp:actionGroup>
<xp:this.condition><![CDATA[#{javascript:
if (compositeData.validateFunctionName) {
compositeData.validateFunctionName.call();
}}]]>
</xp:this.condition>
<xp:save></xp:save>
</xp:actionGroup>
</xp:this.action>
</xp:eventHandler>
</xp:button>