我想将SSJS中的函数参数(即FunctionObject)传递给bean,然后将该函数作为一种回调函数调用。例如:
companyBox.setGenerator(function() {
return @DbColumn("", SystemBean.getViewName(), 2);
});
这样我就可以在需要实际值时调用该函数。
我预计这会失败,因为缺少 SSJS 上下文,但这个想法仍然很诱人。或者可能是因为该函数无法序列化,但这到底意味着什么我还不知道。在本例中,companyBox 对象是从具有 View /页面范围的托管 bean 创建的:一旦当前页面消失,我就不再需要它。
欢迎提供线索...
最佳答案
是的。您有两个选择。
1) 使用“值绑定(bind)”。 托马斯·阿德里安评论了this question ,斯文·哈塞尔巴赫 blogged关于调用外部 SSJS 库(顺便说一句,很酷的东西)。
简而言之:调用内部 JSF 引擎来解析值绑定(bind) - 可以是 SSJS(包括对您的方法的调用)或任何其他绑定(bind) (EL)。它适用于“动态”构造表达式,以字符串形式传递。
2) 使用Function对象作为参数。该技术的蓝图已可用 here 。您的评论表明您了解 com.ibm.jscript
包。那么,com.ibm.jscript.std.FunctionObject
类的 call()
方法的当前实现将支持您的经验观察:
/* */ public FBSObject call(FBSValueVector paramFBSValueVector) {
/* 163 */ return null;
/* */ }
提示:强烈推荐 JD Eclipse 和 JD Eclipse-realign!
另一种具有更复杂签名的调用方法是可行的方法。用于定义自定义@Functions,例如this snippet .
关于java - XPage:是否可以从 Java 调用 SSJS 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29239720/