我试图在javascript中使用Spring变量:
Map<String, List<String>> states;
我在这里找到了一些信息
所以我试着:
<script th:inline="javascript">
/*<![CDATA[*/
var xxx = ${states};
console.log(xxx);
/*]]>*/
</script>
在浏览器的“源”选项卡中,我有如下内容:
var xxx = {STATE1=[a, b, c, d]};
console.log(xxx);
错误是:未捕获语法错误:速记属性初始值设定项无效
。
我还尝试了:var xxx = /*[[${}]]*/ 'foo';
如果我打印console.log(xxx)
,我得到了'foo'
。
我使用您的评论解决了我的问题:
1) 缺少一个报价:
<script th:inline="javascript">
/*<![CDATA[*/
var xxx = '${states}';
console.log(xxx);
/*]]>*/
</script>
2) 必须分析对象,以便:
var hashmap = $.parseJSON(xxx);
3) 在我需要序列化我的对象之前(这不是ajax调用,所以我需要手动序列化它):
Map<String, List<String>> states...
model.addAttribute("states", new ObjectMapper().writeValueAsString(states));
现在我可以读我的物体了:
var myList = hashmap['STATE1'];
console.log(myList )
将打印[a, b, c, d]
,我可以循环:
for(i in myList ){
console.log(myList[i]);
}
{b}由于{c}错误,此对象代码是无效的。
解释非常简单:您看到的是服务器端渲染的产物(您使用的Thymeleaf非常胖,正如我所建议的:内联标签)。因此,在服务器上,您的map对象get呈现为{STATE1=[a, b, c, d]}
字符串。在您的客户端(浏览器)上,您将获得带有此字符串的页面,而不是其他内容。已经没有任何Java对象。只是字符串。这个字符串在Javascript中是无效的对象初始化。
所以你不能这样使用地图。您无法使用JSON解析此内容。解析
,因为它是无效的JSON(应该使用:
而不是=
)。
希望这能有所帮助!
注意:如果你试图用Javascript中的=
替换:
它的工作方式与你预期的不同:数组[a,b,c,d]
将被视为一个变量数组,其名称为a
,b
,c
和d
,因此你必须在'
中删除它。但我建议抛弃这个想法,重新思考你的方法。这不是应该使用的方式。
我想在单击按钮时打印我的产品详细信息。 我有两个字典Watchs和TV 这里是我的javascript代码,在此我使用函数打印字典的值,并使用保存字典的名称。但当我编写时,输出是未定义的。 但当我单击“手表”按钮和时,它会将输出作为手表给我,或者单击“电视”按钮和时,它会将输出作为电视给我。 那么为什么不起作用。 null null
我正在使用Thymeleaf作为模板引擎。我如何将一个变量从Spring模型传递到JavaScript变量? Spring侧:
问题内容: 在PHP中,您可以执行以下令人惊奇/可怕的事情: 有没有办法用Java做类似的事情? 例如,如果我有一个名称,可以得到对变量的引用吗? 问题答案: 由于ECMA-/ JavaScript是所有关于和(其也somekind的对象的),每个变量被存储在这样的被称为 可变 (或在功能方面,的情况下, 激活对象 )。 因此,如果您创建这样的变量: 在 全局范围 (= NO函数上下文)中,您将这
问题内容: 我们正在开发一个Spring Boot Web应用程序,正在使用的数据库是MySql; 我们拥有的设置是我们首先在本地对其进行测试(意味着我们需要在PC上安装MySql); 然后我们推向Bitbucket ; Jenkins自动检测到对Bitbucket的新推送并在其上进行构建(要使Jenkins mvn构建通过,我们还需要在运行Jenkins的虚拟机上安装MySql)。 如果Jenk
问题内容: 我正在使用spring的PreAuthorize注释,如下所示: 但是,我已经在另一个类上将“角色”定义为静态字符串。如果我尝试使用此值: 我收到一个错误: 有没有办法使用PreAuthorize批注访问此类静态变量? 问题答案: 尝试以下使用Spring Expression Language评估类型的方法: 确保指定完全限定的类名。 文献资料
我们正在做一个spring boot web应用程序,我们使用的数据库是MySQL; > 我们的设置是首先在本地测试它(意味着我们需要在PC上安装MySQL); 然后我们推到Bitbucket; Jenkins自动检测对Bitbucket的新推送,并在其上进行构建(为了通过Jenkins mvn构建,我们还需要在运行Jenkins的虚拟机上安装MySQL)。 如果Jenkins构建通过,我们将代码