我想将一个列表从控制器传递到一个javascript文件,并在js文件中对其进行迭代。
但是我在js中只有“未定义”。
我使用Thymeleaf模板,并且我的js文件与html分开了。
//控制器
List<Bean> list = new ArrayList<Bean>();
model.addAttribute("list", list);
// html
<input id="list" type="hidden" th:value="${list}"/>
// javascript
var list=$('#list').val();
console.log("list: "+ list);
//[Bean(month=201805, date=2018-05-02),Bean(month=201804, date=2018-05-03)], which is correct
for(var i in list) {
console.log("date: "+ list[i].date); // I got undefined
console.log("month: "+ list[i].month); // I got undefined,too
}
我希望获得月份和日期的值,有人知道吗?
最佳答案
无需将列表放入html元素中,只需将其直接放入Javascript中即可。像这样:
<script th:inline="javascript">
var list = /*[[${list}]]*/ [];
</script>
<script src="/your_other_javascript_file.js"></script>
您的循环无法正常工作的原因是
$('#list').val();
不是数组,而是字符串。遍历字符串不会达到您的期望。