div 中data-work 属性的内容是${top.section} 返回的字符串表示形式。所以,在你的情况下,看起来像这样:
<div class="card"
data-work="[com.example.working.Foobar@7r6r8e]"
onclick="showData(this.dataset.work)">some content</div>
[com.example.working.Foobar@7r6r8e] 是在 Thymeleaf 处理模板时对 ArrayList 中的每个 Foobar 对象调用 toString() 方法的结果。
因此,要在 div 中获取有用的数据,您需要覆盖 Foobar 类中的 toString() 方法。
此外,您需要以一种能够提供每个Foobar 实例中数据的可用表示的方式覆盖它。
在我的小测试用例中,我的测试类中只有一个字段,所以我这样做了:
@Override
public String toString() {
return "{ \"amount\":" + amount + "}";
}
我选择将数据格式化为 JSON,以便 JavaScript 更容易处理。
现在,div 看起来像这样(在我的例子中):
<div class="card"
data-work="[{ "amount":123}, { "amount":456}]"
onclick="showData(this.dataset.work)">click me!</div>
在我页面上的showData 函数中,我有这个:
function showData(work) {
console.log(JSON.parse(work))
}
这表明我的数据已从字符串解析回包含两个 JS 对象的 JavaScript 数组(因为我在 ArrayList 中放置了 2 个对象):
请注意如何选择覆盖 toString() - 或者是否应该覆盖。
您可能更喜欢有一个单独的方法,它会生成Foobar 的字符串表示,只是为了传递给您的模板。您可能不希望您的类的规范字符串表示由您的网页需求决定。
它们(toString 和您的字符串化器)可能应该作为单独的格式保存,因为它们的用途非常不同。
(此外,如果您确实选择使用 JSON 作为传递给 Thymeleaf 的表示形式,请使用库来构建它 - 不要像我在我的小演示中那样偷懒:不要使用字符串连接。)