发送 Java 数组作为 Java 脚本参数

Send Java array as JavaScript parameter

问题

我通过**model.addAttribute**[=从StarConroller.java发送一个数组到Star.jsp页面16=]

StarConroller.java

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

我想通过单击 Star.jsp[= 中的“显示书籍”按钮将这组书籍发送到 Star.js 38=]

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]

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

您应该将 List<Object> books = booksService.findAll(); 更改为更具体的内容,也许 List<String> books = booksService.findAll();?

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

You should create a DTO (Data transfer object (DTO),以前称为值对象或VO,是一种用于在软件应用程序子系统之间传输数据的设计模式。DTO通常与数据访问对象结合使用以实现从数据库中检索数据。)https://en.wikipedia.org/wiki/Data_transfer_object 并使用它代替列表中的对象。

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

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

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