如何从<xe:restjsondata>数据源</xe:restjsondata>访问原始JSON

时间:2014-07-24 13:31:23

标签: xpages xpages-extlib ibm-sbt

我成功使用绑定到dataTable的restJsonData源来显示项目列表

<xe:restJsonData var='rest' endpoint="myendpoint" serviceUrl="/projects/" paramCount="limit" paramFirst="offset" paramFirstType="page1" splitPath="items"> </xe:restJsonData>

为了让用户能够过滤我还想拥有一个由同一响应数据驱动的组合框。 这听起来很简单但是通过像这样的重复控制来构建一个组合框不起作用..(空出来)

<xp:comboBox id="comboBox1"> <xp:repeat id="repeat1" rows="30" value="#{rest}" var="project" disableOutputTag="true"> <xp:selectItem itemLabel="#{project.fields[0].values[0].value}" itemValue="#{project.fields[0].values[0].value}"></xp:selectItem> </xp:repeat> </xp:comboBox>

所以我相信我需要手动迭代json并构建一个selectitems集合。相当简单,但首先我需要原始的json。我可以这样得到它..

@Endpoint("myendpoint").xhrGet("/projects/").getData();

然后我假设我正在两次调用webservice。

所以我想做的是从数据源获取原始json以避免第二次调用,因此我可以手动迭代它。那可能吗? myDs.getData()或类似的东西。

注意:我知道从长远来看,最好用一些豆子来做这件事但是我想知道是否可以使用开箱即用的控件快速完成。

谢谢!

1 个答案:

答案 0 :(得分:0)

restJsonData在您定义的范围内缓存接收的数据。因此,在您指定的范围(请求/视图/会话/应用程序)中使用数据源的次数不是问题。

详细说明,restJsonData有一个实际读取数据的JsonAccessor。该类(继承自DataBlockAccessor)预取数据并使用它多次,只要我们不更改参数(例如页面索引等)。

数据保存在范围变量中像bean一样存储的数据容器中。但我真的不知道如何从数据容器中提取数据。

所以最好使用额外的重复来构建你的组合框。您的代码似乎没问题,如果您发布json数据结构,我们可以看看它为什么不起作用。

附加说明:Endpoint.xhrGet()未缓存。