【问题标题】:trying to access EL variable in javascript [duplicate]试图在javascript中访问EL变量[重复]
【发布时间】:2015-12-10 16:39:37
【问题描述】:

我有一个 JSP,我在其中定义了一个 JSTL 变量:

<c:set var="productName">
    <fmt:message key="product.name" />
</c:set>

现在,我想在javascript中访问这个变量,我尝试了以下

var prodName = '<c:out value="${productName}"/>'
alert(prodName)

但这不会打印变量的值,而只是打印:

<c:out value="${productName}"/>

我错过了什么?

我还在我的 JSP 中使用了${pageContext.request.contextPath}。现在,我将代码移至 Javascript。如何在 Javascript 代码中检索 ${pageContext.request.contextPath} 的值?请注意,我不能在我的 HTML 中使用 onlick 或内联 javascript 将此值从 JSTL 传递到 javascript,因为我使用的内容安全策略不允许这样做。请提出一些建议。

【问题讨论】:

  • "它只是打印:"它打印什么?
  • 我修复了 stackoverflow 之前截断代码的问题

标签: javascript jsp el


【解决方案1】:

停止在单引号字符串中使用&lt;c:out 表达式。你只需要'${productName}'

我还建议将页面上下文数据设置在脚本标记中的单个 JSON 样式对象文字中,而不是尝试将其放入 HTML 或在 JS 代码中立即执行。对于客户端开发人员来说,这更灵活、更易读、更容易使用。如果行为层需要它,请将其以一种简单、明显的数据格式保存在一个中心位置,与视图和尽可能多地使用数据的 JavaScript 隔离,这样您将做得更明显 5000% ,比我作为主要客户端开发人员接触过的绝大多数 Java 代码库的模板层所产生的内容更清晰且可维护的工作。

【讨论】:

  • 你的意思是 '${productName}' 在 javascript 中?这对我不起作用。它只打印字符串 ${productName}。问题是由于某种原因它没有评估表达式的值。
【解决方案2】:

我过去用来传输变量的一个技巧是将变量的值放入 JavaScript 获取的数据属性中。例如:

<div class="demo" data-prodname="${ productName }"></div>

<script type="text/javascript">
    alert($('.demo').data('prodname'));
</script>

但是,如果您尝试输出到属性的变量包含引号(类似于 JSON 字符串),这可能很敏感。它们需要进行转义或 HTML 编码。

【讨论】:

    猜你喜欢
    • 2011-10-22
    • 2021-08-23
    • 2011-05-16
    • 2012-10-03
    相关资源
    最近更新 更多