编程语言
首页 > 编程语言> > 如何将JavaScript数组传递给XPage Java控制器

如何将JavaScript数组传递给XPage Java控制器

作者:互联网

我正在使用jQuery DataTables.我有它列出一个视图,并有复选框来选择多个文档.我可以通过此客户端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数组转换为基于集合的对象?

谢谢!

解决方法:

这里有一些技巧.

首先,由于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< String>,因为Java的泛型实际上只是编译器生成的代码的提示,而不是在对象本身中实际强制执行,但如果传入的List包含,则存在ClassCastException的风险任何非字符串类型.

标签:java,xpages
来源: https://codeday.me/bug/20190608/1200868.html