Thymeleaf:如何在 js 文件中获取环境变量而不是 html

Thymeleaf: How to get environment variable in js file not html

我正在使用 thymleaf 引擎。 我可以在 .html 文件中得到 environment variable。但是我没能在 .js 文件中得到 environment variable。如何在 .js 文件中获取 environment variable 而不是 .html

下面的代码显示了我在 .js.html

中定义 environment variable 时的结果

application.properties

huge=huge

当我在foo.html

中定义environment variable
<script type="text/javascript">
hugeOfHtml = "[[${@environment.getProperty('huge')}]]";
</script>

结果在chrome F12

<script type="text/javascript">
hugeOfHtml = "huge";
</script>

与我在 foo.js

中定义 environment variable 相比
hugeOfJs = "[[${@environment.getProperty('huge')}]]";

结果在chrome F12

hugeOfJs = "[[${@environment.getProperty('huge')}]]";

如何在 .js 文件中获取 environment variable 而不是 .html

我假设您正在使用 spring boot 2 和 thymeleaf 3。外部化的 js 文件很可能位于 src/resources/static/ 路径中,如果是这样,thymeleaf 将不会处理它。现在假设你将它移动到另一个目录 src/resources/templates/js/,thymeleaf 应该处理外部化的 js 文件并给出你所期望的结果。

但是,鉴于外部化的 js 文件不再是静态资源,您将不得不在控制器中公开一个 get 方法来加载外部化的 js 文件。该方法将如下所示;

@Controller
public class FooController {

    @GetMapping("/js/foo.js")
    public String loadFooDotJs(){
        return "/js/foo.js";
    }
}

上述方法将加载外部化的 js 文件,使用 thymeleaf 对其进行处理,并 return 进行相应处理。

如果您只使用 spring;不是 spring 引导,我相信您还必须创建模板解析器和模板引擎。 Here is a good article by Baeldung.