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



我成功地使用了绑定到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手动并建立一个选择项的集合。相当简单,但首先我需要原始json。我可以这样得到它。

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

但是我假设我调用了两次web服务。

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

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

谢谢!

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

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

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

所以使用额外的repeat来构造组合框是一个更好的主意。你的代码看起来不错,如果你发布json数据结构,我们可以看看它为什么不工作。

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

最新更新