【问题标题】:How to pass a JavaScript array to an XPages Java Controller如何将 JavaScript 数组传递给 XPages Java 控制器
【发布时间】:2016-04-01 16:52:51
【问题描述】:

我正在使用 jQuery 数据表。我让它列出了一个视图并有复选框来选择多个文档。我可以通过这个客户端 JavaScript 代码将选定的键放入会话范围:

<xp:this.script><![CDATA[// Build array of selected rows
var myTableApi = x$("inventoryTable").DataTable();
var count = myTableApi.rows( { selected: true } ).count();
var dataArr = [];
var rowData = myTableApi.rows( { selected: true } ).data();
    $.each($(rowData),function(key,value){
        dataArr.push(value[3]);
    });

// Push that to the requestScope
setScopeValue("session", "rowCount", count);
setScopeValue("session", "rowIds", dataArr);]]></xp:this.script>

一旦 id 在 Scope 中,我会更改页面,然后我想将它们加载到我的 Java pageController 中。

我可以轻松地使用变量解析器来获取“rowIds”。但我不确定如何将它放入 Java 中,以便我可以使用它。理想情况下,我希望它是 List 或 Set 或类似的东西。

在 Java 中,如何将此 JavaScript 数组转换为基于集合的对象?

谢谢!

【问题讨论】:

标签: java xpages


【解决方案1】:

这里有一些技巧可以做。

首先,由于setScopeValue 函数的特定实现在将所有值发送到服务器之前将它们转换为字符串,因此执行setScopeValue("session", "rowIds", XSP.toJson(dataArr)) 很重要。这样,存储在服务器上的值将是 ["foo", "bar", "baz"] 而不是 foobarbaz

其次,在 Java 中获取会话范围值的最佳方法是通过 ExtLibUtil.getSessionScope().get("rowIds")

不过,该值将是一个字符串,而不是数组类型,因此必须从 JSON 中解析它。使用 IBM Commons JSON 功能,可以通过以下方式完成:

List<?> rowIds = (List<?>)JsonParser.fromJson(JsonJavaFactory.instance, ExtLibUtil.getSessionScope().get("rowIds"))
for(Object rowIdObj : rowIds) {
    String rowId = StringUtil.toString(rowIdObj);
    // do stuff with each ID here
}

您也可以直接将其大小写为 List&lt;String&gt;,因为 Java 的泛型实际上只是编译器生成代码的提示,并没有真正在对象本身中强制执行,但是如果存在 ClassCastException 的风险传入的List 包含任何非字符串类型。

【讨论】:

    猜你喜欢
    • 2014-08-27
    • 2013-08-13
    • 2021-09-24
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多