XPages:是否可以从 Java 调用 SSJS 函数?
XPages: is it possible to call an SSJS function from Java?
我想将 SSJS 中的函数参数(即 FunctionObject)传递给 bean,然后将该函数作为一种回调函数调用。例如:
companyBox.setGenerator(function() {
return @DbColumn("", SystemBean.getViewName(), 2);
});
这样我就可以在需要实现值时调用该函数。
我预计这会失败,因为缺少 SSJS 上下文,但这个想法仍然很诱人。或者可能是因为该函数无法序列化,但这到底意味着什么我还不知道。在这种情况下,companyBox 对象是从具有 view/page 范围的托管 bean 创建的:一旦当前页面消失,我就不再需要它了。
欢迎提供线索...
是的。你有两个选择。
1) 使用"value binding"。
Thomas Adrian 评论了 this question, Sven Hasselbach blogged 关于调用外部 SSJS 库(顺便说一句,很酷的东西)。
简而言之:调用内部 JSF 引擎来解析值绑定 - 可以是 SSJS(包括对您的方法的调用)或任何其他绑定 (EL)。它适用于 "on fly" 构造的表达式,作为字符串传递。
2) 使用函数对象作为参数。该技术的蓝图可用 here。您的评论表明您知道 com.ibm.jscript
包。那么,com.ibm.jscript.std.FunctionObject
class 的 call()
方法的当前实现将支持您的经验观察:
/* */ public FBSObject call(FBSValueVector paramFBSValueVector) {
/* 163 */ return null;
/* */ }
提示:强烈推荐JD Eclipse和JD Eclipse-realign!
另一种具有更复杂签名的调用方法是可行的方法。它用于定义自定义@Functions,例如this snippet.
我想将 SSJS 中的函数参数(即 FunctionObject)传递给 bean,然后将该函数作为一种回调函数调用。例如:
companyBox.setGenerator(function() {
return @DbColumn("", SystemBean.getViewName(), 2);
});
这样我就可以在需要实现值时调用该函数。
我预计这会失败,因为缺少 SSJS 上下文,但这个想法仍然很诱人。或者可能是因为该函数无法序列化,但这到底意味着什么我还不知道。在这种情况下,companyBox 对象是从具有 view/page 范围的托管 bean 创建的:一旦当前页面消失,我就不再需要它了。
欢迎提供线索...
是的。你有两个选择。
1) 使用"value binding"。 Thomas Adrian 评论了 this question, Sven Hasselbach blogged 关于调用外部 SSJS 库(顺便说一句,很酷的东西)。
简而言之:调用内部 JSF 引擎来解析值绑定 - 可以是 SSJS(包括对您的方法的调用)或任何其他绑定 (EL)。它适用于 "on fly" 构造的表达式,作为字符串传递。
2) 使用函数对象作为参数。该技术的蓝图可用 here。您的评论表明您知道 com.ibm.jscript
包。那么,com.ibm.jscript.std.FunctionObject
class 的 call()
方法的当前实现将支持您的经验观察:
/* */ public FBSObject call(FBSValueVector paramFBSValueVector) {
/* 163 */ return null;
/* */ }
提示:强烈推荐JD Eclipse和JD Eclipse-realign!
另一种具有更复杂签名的调用方法是可行的方法。它用于定义自定义@Functions,例如this snippet.