读取Javascript中的Java数组
我有一个在java中返回2d数组的方法:读取Javascript中的Java数组,java,javascript,arrays,jsf,Java,Javascript,Arrays,Jsf,我有一个在java中返回2d数组的方法:public Object[][]getArray1(){} 我使用了println()来打印它的内容,我发现它创建得很好 在Javascript上,我将此数组分配给var: var content ="#{BDEStats.getArray1()}"; 但我似乎无法访问它的数据。它总是返回java.Lang.object;@如何显示此数组包含的内容 我试图循环数组,但我不知道如何引用它所持有的对象。如果我使用content[1]返回该索引中的字符。。!
public Object[][]getArray1(){}
我使用了println()
来打印它的内容,我发现它创建得很好
在Javascript上,我将此数组分配给var
:
var content ="#{BDEStats.getArray1()}";
但我似乎无法访问它的数据。它总是返回java.Lang.object;@代码>如何显示此数组包含的内容
我试图循环数组,但我不知道如何引用它所持有的对象。如果我使用content[1]
返回该索引中的字符。。!这是Java中正常的数组
字符串
表示形式,包括:
- 基于维度的大量
[
- 原语类型的字母(即
i
表示int
),或L[完全限定类名]
表示对象
s
@
数组的哈希代码
对于一维array
s,使用java.util.array.toString(myArray)
对于多维array
s,使用java.util.array.deepToString(myArray)
编辑(在答案中添加以前的注释)
您可能需要研究JSON.parse
以从JavaScript解析Java数组。我认为您可以在将数组分配给JavaScript之前将其转换为JSON格式
您可以使用一些JSON框架进行此转换,如:
这里是一个小小的杰克逊演示:
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
...
public static void main(String[] args) throws JsonProcessingException {
String[][] data = new String[1][2];
data[0][0] = "abc";
data[0][1] = "def";
System.out.println(new ObjectMapper().writeValueAsString(data));
}
要将Java数组转换为可以由JavaScript引擎解释的语法中的字符串表示,需要将其转换为JavaScript对象表示法,简称JSON
Java可以使用很多库来实现这一点。Stackoverflow上的软件建议是离题的,但帮助我为我的项目选择了一个
在JavaScript方面,您只需使用var content=JSON.parse(stringFromJava)
或者,当您在Java端按程序生成JS代码时,您可以将JSON字符串直接嵌入源代码中。这是因为JSON是对象文本的有效Javascript代码。在Java中,这类似于:
scriptCode.append("var content = " + arrayAsJsonString + ";\n");
var content=#{JAVACLASS.METHODTHATRETURNSJSON};
for (var tt=0; tamanho>tt ; tt++) {
[now im specifically adding the values to create a graphic but its just na exemple how u can acess te object]
data.setValue(tt, 0, json["aa"+tt]);
data.setValue(tt, 1, json["bb"+tt]);
好的,问题解决了。我就是这样做的:
我没有返回Java数组,而是在方法中返回了一个JSON对象
此JSON对象每个ex有一个名称和几个其他字段:
(我从Java列表中获取数据,因此我迭代该列表以填充JSON对象)
在此之后,如果我用java打印JSON对象,我会得到一个字符串:
aa0:‘第一个名字’;aa1:‘第二个名字’;bb0:‘年龄’;bb1:‘第二个年龄’……等等
在此之后,在Javascript中,我通过JSF获得JSON对象,如下所示:
scriptCode.append("var content = " + arrayAsJsonString + ";\n");
var content=#{JAVACLASS.METHODTHATRETURNSJSON};
for (var tt=0; tamanho>tt ; tt++) {
[now im specifically adding the values to create a graphic but its just na exemple how u can acess te object]
data.setValue(tt, 0, json["aa"+tt]);
data.setValue(tt, 1, json["bb"+tt]);
我在JS中对该对象进行了字符串化:
var pars= JSON.stringify(content);
我创建了JSON对象
SONObject jsonObj = new JSONObject();
jsonObj.clear();
for (int tt=0; tamanho>tt ; tt++) {
try {
jsonObj.put("aa"+tt, ListaJobStats.get(tt).getName());
jsonObj.put("bb"+tt , new BigDecimal(ListaJobStats.get(tt).getAge() ....
var json = JSON.parse(pars)
现在我在JS中迭代这个JSON对象,如下所示:
scriptCode.append("var content = " + arrayAsJsonString + ";\n");
var content=#{JAVACLASS.METHODTHATRETURNSJSON};
for (var tt=0; tamanho>tt ; tt++) {
[now im specifically adding the values to create a graphic but its just na exemple how u can acess te object]
data.setValue(tt, 0, json["aa"+tt]);
data.setValue(tt, 1, json["bb"+tt]);
希望它会有用。注意你不能这样做。我看到你在使用JSF,你想做什么?我有一个接收2d数组的图形,我构建了一个数组,其中保存了我想传递给图形的值。我用java打印出了所有的值,但是当我通过JSF传递对象时,我无法访问这个数组。请查看answer here:好的,我在JAVA类中创建了一个JSONObject,它有一个返回它的方法。我现在可以通过JSF在客户端访问它吗?Javascript中有任何等价的东西可以访问该数组吗?@salvadormace你可能想调查JSON.parse
。谢谢你的回答。我正在调查JSON。所以我不需要如果我理解正确,直接从JAVA传递数组,通过JSF读取。我的2d数组应该是图形的输入。我用Javascript返回的这个对象是无用的,我不能用JS直接解析他,对吗?Stringify+解析步骤完全没有必要。你基本上是将它从JSON转换为字符串,然后n再次转换为JSON。只需执行var JSON={JAVACLASS.methodthattreturnsjson};
。