【问题标题】:jstl inside javascriptjavascript里面的jstl
【发布时间】:2011-05-06 16:31:25
【问题描述】:
可以在javascript中使用jstl吗?
我要设置<c:set var="abc" value="yes"/>
然后稍后在 html 中访问该值并执行一些代码。我的问题是即使 javascript 条件为假,c:set 也始终在执行。
<script type="text/javascript">
var v1 = false;
<c:set var"abc" value="yes"/>
if(v1){
<c:set var"abc" value="no"/>
}
</script>
在上面的代码中,即使 v1 为 false 'no' 也设置为 abc。
【问题讨论】:
标签:
javascript
html
jsp
jstl
【解决方案1】:
当您谈论服务器端 JSP 解释时,“在 Javascript 内部”的想法没有任何意义。就该域而言,没有 Javascript 这样的东西。
因此,是的,这是可能的,如果你的意思是你想做类似的事情
var something = '${abc}';
请注意,您必须小心引用和特殊字符。 JSTL fn:escapeXml() 函数在您将 JSP 变量插入到将被浏览器解释为 Javascript 源的页面的一部分时是无用的。您可以使用 JSON 库对字符串进行编码,也可以编写自己的 EL 函数来进行编码。
【解决方案2】:
这是一个相当古老的线程,但是当我遇到同样的问题时,我碰到了它。由于我自己想到了一个解决方案,所以我会在这里发布它以防将来对某人有所帮助。
html(或 jsp)文件在声明为 javascript 源的外部文件中查找文本。
Tomcat(或类似的)仅解释具有 .jsp 扩展名的文件中的 JSTL 标记(或者也可能是其他一些,但与此答案无关)。
所以,重命名你的 .js 文件,给它一个 .jsp 扩展名(例如 javascript.js 到 javascript_js.jsp )
在 javascript_js.jsp 的顶部添加这些行:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
保持代码不变。
显然,如果您在标头中使用 c: 以外的前缀,则还需要添加更多前缀。
如果您使用 Eclipse(不了解其他 IDE),它将假定它不是 javascript 文件,并且您会丢失不同关键字(var、function 等)的配色方案、var name 自动完成和自动缩进。
为了愚弄IDE,你可以添加
// <script>
作为 js 注释,在实际代码之前(在 "
// </script>
在文件末尾,再次作为 js 注释。
它对我有用。
【解决方案3】:
<script>
<c:set var="myVal" value="Hello"/>
var val1="${myVal}";
</script>