发送 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 +
'}';
}
}
问题
我通过**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 +
'}';
}
}