【问题标题】:Send Java array as JavaScript parameter发送 Java 数组作为 JavaScript 参数
【发布时间】:2021-03-30 01:52:51
【问题描述】:

问题

我将一个数组从 StarConroller.java 发送到 Star.jsp 页面 **model.addAttribute**

StarConroller.java

List<Object> books = booksService.findAll();
model.addAttribute("books ", books);

我想通过点击Star.jsp中的“显示图书”按钮将这一系列图书发送到Star.js

Star.jsp

<button type="button" onclick="show(`${books}`)">Show books</button>

Star.js

function show(books) {
    console.log(books);
}

问题

当我点击“显示书籍”按钮时,我收到以下日志消息,而不是书籍值:

[ [Ljava.lang.Object;@43395a7b, [Ljava.lang.Object;@aff89fb, [Ljava.lang.Object;@76f41bc8]

【问题讨论】:

  • 请贴出你的完整代码,sn-ps 不完整。

标签: javascript java jquery spring-mvc jsp


【解决方案1】:

您的变量books 包含Object 的列表。如果您执行以下代码行console.log(books);,那么Java 将转到该列表中的每个对象并在每个对象上调用toString() 方法。默认情况下,Object 返回您已经可以看到的那种输出。

您应该将List&lt;Object&gt; books = booksService.findAll(); 更改为更具体的内容,也许是List&lt;String&gt; books = booksService.findAll();

要回答这个问题,我们应该知道您的服务将返回什么。

您应该创建一个 DTO(数据传输对象 (DTO),以前称为值对象或 VO,是一种用于在软件应用子系统之间传输数据的设计模式。DTO 通常与数据访问对象结合使用以检索数据来自数据库。)https://en.wikipedia.org/wiki/Data_transfer_object 并在列表中使用它而不是 Object。

如果您选择使用自己的 DTO 而不是 String,请记住覆盖 toString 方法。

public class Books {
    private String name;
    private int length;

    @Override
    public String toString() {
        return "Books{" +
                "name='" + name + '\'' +
                ", length=" + length +
                '}';
    }
}

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 2014-06-16
    • 1970-01-01
    • 2013-07-24
    相关资源
    最近更新 更多