带有百里香叶转义字符的内联javascript

Posted

技术标签:

【中文标题】带有百里香叶转义字符的内联javascript【英文标题】:Inline javascript with thymeleaf escaping character 【发布时间】:2018-03-06 21:13:50 【问题描述】:

我用百里香叶和春天。 我尝试做内联javascript

<script th:inline="javascript">

    $("#genericTable").bootstrapTable(
        url: /*[[$url]]*/ 'generic',
        ...
     );    

在服务器端我做

 model.addAttribute("url", "/rest/vehicles");

我明白了

网址:“\/rest\/vehicles”,

为什么要在字符串中添加一些字符?

编辑

url: /*[[@$url]]*/ 'generic',

第一个 / 就像被移除了,所以调用是无效的...

【问题讨论】:

对不起,我不明白:你得到了哪些额外的字符? 我更新了,添加了\字符 J 认为这是因为它对 / 进行了转义。这就是 URL 有特殊语法的原因。看这里,有一个关于 URL 重写的部分。 thymeleaf.org/doc/articles/standardurlsyntax.html 您是否尝试在 Javascript 注释之外生成它?例如,直接在 HTML 中作为文本(当然使用 @)。万一你得到什么? 如果我只使用:@$url 什么都不会生成 【参考方案1】:

[(...)] 应该有帮助

我面临的问题示例:

$.getJSON('[[@/management/users/search/unit/]]' + value, function(data) 

转化为:

$.getJSON('"\/management\/users\/search\/unit\/"' + value, function(data) 

使用[(...)]

$.getJSON('[(@/management/users/search/unit/)]' + value, function(data) 

转化为:

$.getJSON('/management/users/search/unit/' + value, function(data)  

来自Thymeleaf 3.0 docs

请注意,虽然 [[...]] 对应于 th:text(即结果将被 HTML 转义),但 [(...)] 对应于 th:utext 并且不会执行任何 HTML 转义。

【讨论】:

【参考方案2】:

你可以试试这样的:

<script type="text/javascript" th:inline="javascript">
  /*<![CDATA[*/
    $("#genericTable").bootstrapTable(
        url: /*[[$url]]*/ 'generic',
        ...
    );  
  /*]]>*/
</script>

【讨论】:

请注意,这个答案是从 2017 年 9 月开始的,这些年来情况可能已经发生了变化......【参考方案3】:

我知道这个问题有点老了,但答案并没有纠正问题,或者我遇到的问题一样。要删除转义,我建议编写这样的代码(双引号仅用于 javascript 目的):

<script type="text/javascript" th:inline="javascript">
  /*<![CDATA[*/
    $("#genericTable").bootstrapTable(
        url: "[(@ $url )]",
        ...
    );  
  /*]]>*/
</script>

【讨论】:

以上是关于带有百里香叶转义字符的内联javascript的主要内容,如果未能解决你的问题,请参考以下文章

带有模型和百里香叶的 Spring Boot Ajax 发布表单提交

使用带有“if”条件的百里香叶的弹簧安全性

javascript字符串是不是需要“转义”字符“<”和“>”?

点击链接不适用于百里香叶

弹簧靴和百里香叶

遍历百里香叶中的数组