试图访问javascript中的EL变量

trying to access EL variable in javascript

本文关键字:EL 变量 中的 javascript 访问      更新时间:2023-09-26

我有一个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或inline javascript将此值从JSTL传递给javascript,因为我使用的内容安全策略不允许这样做。请提出一些建议。

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

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

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

<div class="demo" data-prodname="${ productName }"></div>
<script type="text/javascript">
    alert($('.demo').data('prodname'));
</script>

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