jstl里面的javascript

cod*_*247 10 html javascript jsp jstl

是否可以在javascript中使用jstl?

我想要定下来 <c:set var="abc" value="yes"/>

然后在html中访问该值并执行一些代码.我的问题是c:即使javascript条件为false,set也始终执行.

<script type="text/javascript">
var v1 = false;
<c:set var"abc" value="yes"/>

if(v1){
  <c:set var"abc" value="no"/>
}
</script>
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,即使v1为假,"否"设置为abc.

Poi*_*nty 21

在谈论服务器端JSP解释时,"在Javascript内部"的概念没有任何意义.就域名而言,没有Javascript这样的东西.

因此,是的,如果你的意思是你想要做类似的事情,这是可能的

var something = '${abc}';
Run Code Online (Sandbox Code Playgroud)

请注意,您必须小心引用和特殊字符.fn:escapeXml()当您将JSP变量插入到将被浏览器解释为Javascript源的页面的一部分时,JSTL 函数是无用的.您可以使用JSON库对字符串进行编码,也可以编写自己的EL函数来执行此操作.


Dan*_*Dan 5

这是一个相当古老的线程,但这是我遇到同样问题时遇到的一个。由于我自己想到了一个解决方案,因此我会将其发布在这里,以防将来对某人有所帮助。

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"%>
Run Code Online (Sandbox Code Playgroud)

并保持代码不变。

显然,如果在标头中使用除 c: 之外的其他前缀,则还需要添加更多前缀。

如果您使用 Eclipse(不知道其他 IDE),它会假设它不是 javascript 文件,并且您会丢失不同关键字(var、function 等)的配色方案、var 名称自动完成和自动缩进。

为了欺骗 IDE,你可以添加

// <script> 
Run Code Online (Sandbox Code Playgroud)

作为 js 注释,在实际代码之前(在“<%@”声明之后),以及

// </script>
Run Code Online (Sandbox Code Playgroud)

在文件末尾,再次作为 js 注释。

这对我有用。