2017-07-25 53 views
0

它不应该是如此困难的障碍,但我不知道如何克服这一点。我想使用ArrayObject和ObjectObject对象在服务器上生成JSON结构,并将其用作服务器端数据源(工作)和客户端。如何将数据轻松地从服务器传输到客户端?XPages:生成JSON服务器端,使用客户端

我试着在ScriptBlock中使用toJson,但它失败(由于Java错误,如果我没有记错的话使用FBSUndefined)。我也尝试在jsonRpcService控件中使用toJson,并使用相同的错误。我会尝试找到一些其他方式来将我拥有的对象串起来,但这就是它。我可以做一个Ajax调用,但这将是最后的解决方案。

您是否有其他更好的方法将服务器对象传输到浏览器?

谢谢!

+1

获取FBSUndefined错误表明要创建JSON的对象明确包含“未定义”值。例如,如果您将某个对象的属性设置为等于另一个不包含此属性的对象的属性,则可能会发生这种情况。海事组织你的数据是问题,而不是你想创建JSON的方式。您应该首先检查生成该对象的代码。如果你找不到导致问题的部分,你可以编写一个帮助函数来迭代地遍历该对象并搜索未定义的值... –

+0

Ah ...糟糕...我删除了大部分JSON生成代码,只留下一个小例子,现在它似乎工作......:$ –

+0

解决了......如果您将您的评论提升为答案,我可以关闭该问题。 –

回答

1

获得一个FBSUndefined错误指示对象要创建JSON的明确地包含“未定义”值。例如,如果您将某个对象的属性设置为等于另一个不包含此属性的对象的属性,则可能会发生这种情况。

IMO你的数据是问题,而不是你想要创建JSON的方式。您应该首先检查生成该对象的代码。如果找不到导致问题的部分,则可以编写一个辅助函数来迭代地遍历该对象并搜索未定义的值。

3

最简单的方法是将代码封装到服务bean中并使用自定义Rest服务(这是ExtLib中的控件)。我写在台阶上的一篇文章:

https://www.wissel.net/blog/2014/10/custom-rest-service-in-xpages-using-a-service-bean.html

如果你只使用SSJS ......这种方法仍然有效。您可以使用SSJS对控件内的响应进行编码。

+0

我确实使用了一种自定义的Rest服务来实现其他功能,但是在这里我想让它变得非常简单,即只是JsonRpc的东西。最后它起作用。 –

3

从Java,我会建议使用com.ibm.commons.util.io.json.JsonJavaArraycom.ibm.commons.util.io.json.JsonJavaObject。它们像Maps/Lists一样工作,可以包含这些接口(所以我通过.put(myKey, myArrayList)将ArrayList添加到JsonJavaObject中)。例如,要输出为JSON作为输出脚本块,请拨打JsonJavaObject.toString()JsonJavaArray.toString()。这是我将在即将发布的图表博客文章中展示的解决方案。

+0

有趣!我会读你的博客。 –