我有一个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,因为我使用的内容安全策略不允许这样做。请提出建议。
答案 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代码库的模板层所产生的,清晰易读且可维护的工作。