我使用我的应用程序之一,下面的函数传递到自定义控制:
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 for the answer on Experts Exchange。
-
更新:
这里有一个自定义属性这样一个自定义控制,其中有问题的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>
这是行得通的。有点。我想我可能会为你的最后一步感到困惑。我所做的是创建一个函数并将其放置在SSJS库中,我将该库作为资源包含在xpage中。然后,我只是在我的CC属性中放置函数的名称,但我得到以下错误脚本解释器错误,线= 4,col = 36:Java类'setValue(undefined)'在java类'com.ibm.xsp.component找不到.xp.XspInputText'。 setValue是我的函数的名称。我在编辑器中放置了setValue,仅此而已。 –
如果我不通过参数,这很好。但我希望我的按钮能够将值传递给函数。我猜想有点像回调。 –
布鲁斯,我用具体的例子更新了我的答案。希望它有帮助 –