【问题标题】:${} template literal (ES2015) conflict with JSP EL syntax${} 模板文字(ES2015)与 JSP EL 语法冲突
【发布时间】:2017-01-06 20:16:01
【问题描述】:

${} 被 JSP 和 JS 使用,所以发生的事情是 JS 模板文字中的 ${} 在编译成 servlet 之前被解释和删除。有没有办法让 Java 忽略 ${} 而无需使用 isELIgnored 完全关闭该功能?

const subject = 'world';
let greet = `hello ${subject}!` 

在浏览器中变成如下

const subject = 'world';
let greet = `hello !` 

这是我想出的最好的,虽然真的不知道它有多丑。

<c:out value="var body = `pq_country=${country}&pq_population=${population}`;" escapeXml='false'/>

【问题讨论】:

  • 只是出于好奇,您为什么要使用反引号?
  • ES6 仅在您使用反引号作为分隔符时替换这些值。您是否尝试过使用简单的撇号?
  • 只需在自己的JS文件中编写JS代码,而不是与HTML源代码混合。多年来,这一直是“最佳实践”。
  • 为了“最佳实践”而将JS写在自己的文件中是不同的,因为你别无选择,所以写起来是不同的。太糟糕了,无法以更好的方式解决这个冲突。

标签: javascript java jsp ecmascript-6 el


【解决方案1】:

您可以在 ${} 前面放置一个反斜杠,以便 JSP 忽略它(David Ford 通过this article 发现)。

const subject = 'world';
let greet = `hello \${subject}!`

【讨论】:

    【解决方案2】:

    你必须将JS代码移动到外部文件或script标签内的函数中,这将是解决jsp与JS语法冲突的最佳方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 2020-05-27
      • 2017-05-15
      • 2011-04-30
      • 2014-12-26
      • 2020-04-02
      相关资源
      最近更新 更多