如何在REST控件中使用compositeData

时间:2012-04-19 00:47:45

标签: xpages

我有一个带有ExtLib REST控件的自定义控件。我正在从其余控件创建JSON。如果我对doGet标签内的所有内容进行硬编码,它的工作正常。

但是当我尝试通过复合数据访问自定义属性时,我得到一个错误:

com.ibm.domino.services.ServiceException: Error while rendering service

Caused by: com.ibm.xsp.exception.EvaluationExceptionEx: Error while executing JavaScript action expression
    at com.ibm.xsp.binding.javascript.JavaScriptMethodBinding.invoke(JavaScriptMethodBinding.java:126)
    at com.ibm.xsp.extlib.component.rest.CustomService$ScriptServiceEngine.renderServiceGet(CustomService.java:311)
    at com.ibm.xsp.extlib.component.rest.CustomService$ScriptServiceEngine.renderService(CustomService.java:262)
    ... 20 more
Caused by: com.ibm.jscript.InterpretException: Script interpreter error, line=11, col=14: [ReferenceError] 'compositeData' not found

有没有办法使用composite来创建我的JSON对象?

我正在尝试创建一个这样的对象:

var object = {};
object.height = compositeData.height
return toJson(object)

2 个答案:

答案 0 :(得分:2)

REST控件应该被视为一个独立的组件,它无法直接访问它所在的页面,因为可以通过类似于database.nsf/page.xsp/RESTServiceName的URL来调用REST服务。

您应该做的是使用包含要传递到控件的参数的网址(例如database.nsf/page.xsp/RESTServiceName?height=20&width=50)调用您的REST服务,然后使用param.get("height")param.get("width")在控件中引用它们

另一个选择可能是将参数放入范围变量并从那里读取它们。

答案 1 :(得分:0)

当从Rest对象调用数据时,它不会在那一刻调用XPage,因此不会加载组件树。在计算时,您可以尝试使用$ {}代替#{}