试图在javascript中访问EL变量

时间:2015-12-10 02:10:03

标签: javascript jsp el

我有一个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,因为我使用的内容安全策略不允许这样做。请提出建议。

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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

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