【问题标题】:Read a Java array in Javascript在 Javascript 中读取 Java 数组
【发布时间】:2015-01-29 14:58:17
【问题描述】:

我有一个在 java 中返回二维数组的方法:public Object[][] getArray1() {}

我使用println() 打印了它的内容,我发现它的创建很好。

在 Javascript 上,我将此数组分配给 var

var content ="#{BDEStats.getArray1()}";

但我似乎无法访问它的数据。它总是返回java.Lang.object; @... 我怎样才能显示这个数组包含的内容?

我尝试循环数组,但我不知道如何引用它所持有的对象。如果我使用content[1] 在该索引中返回一个字符..!有点迷路了

【问题讨论】:

标签: java javascript arrays jsf


【解决方案1】:

我认为您可以先将数组转换为 JSON 格式,然后再将其分配给 javascript。

您可以使用一些 JSON 框架来执行此转换,例如:

这里有一个小小的 Jackson 演示:

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));
}

【讨论】:

  • 感谢您的回复。我正在调查Json。因此,如果我理解正确,我不需要直接从 JAVA 传递数组来通过 JSF 读取它。我的二维数组应该是图形的输入。我在 Javascript 中返回的这个对象是无用的,我不能直接在 JS 中解析他,对吗?
【解决方案2】:

这是Java中普通的arrayString表示,包括:

  • [ 基于维度的数量
  • 原始类型的字母(即intI)或Objects 的L[fully qualified class name]
  • @
  • array 的哈希码

对于一维arrays,使用java.util.Arrays.toString(myArray)

对于多维arrays,使用java.util.Arrays.deepToString(myArray)

编辑(添加之前的评论来回答)

您可能想调查 JSON.parse 以从 JavaScript 解析您的 Java 数组。

【讨论】:

  • 在 Javascript 中有什么等效的东西可以访问数组吗?
  • @SalvadorMacedo 你可能想调查JSON.parse
【解决方案3】:

要将 Java 数组转换为 JavaScript 引擎可以解释的语法中的字符串表示,您需要将其转换为 JavaScript Object Notation,简称 JSON。

有许多库可供 Java 执行此操作。软件推荐在 Stackoverflow 上是题外话,但 this article which compares 5 different libraries 帮助我为我的项目选择了一个。

在 JavaScript 方面,您只需使用 var content = JSON.parse(stringFromJava)

或者,当您在 Java 端以程序方式生成 JS 代码时,您可以将 JSON 字符串直接嵌入到源代码中。这是因为 JSON 是对象文字的有效 Javascript 代码。在 Java 中,这看起来像这样:

 scriptCode.append("var content = " + arrayAsJsonString + ";\n");

【讨论】:

    【解决方案4】:

    好的,问题解决了。我就是这样做的:

    我在我的方法中返回了一个 JSON 对象,而不是返回一个 Java 数组。

    这个 JSON 对象有一个名称和其他几个字段: (我从 Java 列表中获取数据,因此我迭代列表以填充 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() ....
    

    之后,如果我在 java 中打印出 JSON 对象,我会得到一个字符串:

    aa0: '第一个名字'; aa1: '第二个名字' ; bb0: '年龄'; bb1: '2nd age' ...等等等等

    在 Javascript 中,我通过 JSF 得到我的 JSON 对象,如下所示:

    var content=#{JAVACLASS.METHODTHATRETURNSJSON};
    

    我在 JS 中对这个对象进行字符串化:

    var pars= JSON.stringify(content);
    

    然后我创建了 JSON 对象

    var json = JSON.parse(pars)
    

    现在我像这样在 JS 中迭代这个 JSON 对象:

    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]); 
    

    ...

    希望它有用。保重

    【讨论】:

    • Stringify + parse 步骤是完全没有必要的。您基本上是将它从 JSON 按摩到 String,然后再按摩到 JSON。只需var json = #{JAVACLASS.METHODTHATRETURNSJSON};
    猜你喜欢
    • 2017-09-09
    • 2012-05-11
    • 2016-02-02
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    相关资源
    最近更新 更多