当前位置: 首页 > 知识库问答 >
问题:

在javascript中使用Spring变量

艾凯捷
2023-03-14

我试图在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'

共有2个答案

越嘉茂
2023-03-14

我使用您的评论解决了我的问题:

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]);
}
宗弘扬
2023-03-14

{b}由于{c}错误,此对象代码是无效的。

解释非常简单:您看到的是服务器端渲染的产物(您使用的Thymeleaf非常胖,正如我所建议的:内联标签)。因此,在服务器上,您的map对象get呈现为{STATE1=[a, b, c, d]}字符串。在您的客户端(浏览器)上,您将获得带有此字符串的页面,而不是其他内容。已经没有任何Java对象。只是字符串。这个字符串在Javascript中是无效的对象初始化。

所以你不能这样使用地图。您无法使用JSON解析此内容。解析,因为它是无效的JSON(应该使用而不是=)。

希望这能有所帮助!

注意:如果你试图用Javascript中的=替换它的工作方式与你预期的不同:数组[a,b,c,d]将被视为一个变量数组,其名称为abcd,因此你必须在'中删除它。但我建议抛弃这个想法,重新思考你的方法。这不是应该使用的方式。

 类似资料:
  • 我想在单击按钮时打印我的产品详细信息。 我有两个字典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构建通过,我们将代码