最近老大让我实现一个项目的国际化功能,大致就是支持项目页面一些固定框架的语言能支持中英文自由切换。所以需要前端跟后端的一些固定字段以及提示语以变量的形式嵌入。前端页面是用大家都很熟知的Thymeleaf渲染,这个东西的确非常好用~ 但是我之前只知道在html标签内通过th标签加${}或者#{}表达式访问变量数据,但是现在的需求需要在javascript代码块里访问变量数据,就去官网查了下,一看好像很简单嘛,大致意思就是把html中的javascript代码块的内联方法:
<script type="text/javascript" th:inline="none">
替换成
<script type="text/javascript" th:inline="javascript">
然后变量的语法也有点不一样:
美滋滋的改完后,启动项目,点开页面,哦豁,页面报错
错误说是有不正常的拼写,追踪一下发现,咦?怎么这么奇怪,明明自己页面的代码是这样的:
前面那些奇怪的东西到底是哪里蹦出来的哇 ,然后仔细研究了一下,发现了原来这是由于Thymeleaf引擎渲染模板失败,其实报的应该是org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression; 但是由于项目框架覆盖了原始的error页面,
直接把error.html页面嵌套到当前页面中了:
难为我这个前端小白,一字一句把这个html看半天,也没看到任何可能造成渲染失败的语法错误。。。实属无奈的我去求教公司的前端大佬,大佬看了半天,最后发现竟然是代码的注释方法搞的鬼!!!
大家请看这段代码:
没想都都变灰了还能作妖!! 大佬说把这段注释的方法删掉或者改成这样注释就没问题了:
我一试真的!!终于看到可爱的200了~
后来我发现这样注释也没问题:
如果javascript内联改成th:inline="javascript"后,// 跟 /* 注释叠在一起:
就出现了上面我遇到的问题,实在是令人费解><!