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.