ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-06-08 22:49:17  阅读:229  来源: 互联网

标签:java xpages


我正在使用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有