Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取Javascript中的Java数组_Java_Javascript_Arrays_Jsf - Fatal编程技术网

读取Javascript中的Java数组

读取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]返回该索引中的字符。。!

我有一个在java中返回2d数组的方法:
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};