13

是否可以从同一页面上的 javascript 访问在 jsp 中定义的 String 类型变量?

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1255">
<title>Insert title here</title>
<script type="text/javascript">  
foo();
function foo()  
{  
var value = "<%=myVar%>";  
alert(value);   
}  
</script>  
</head>
<body>

<%

String myVar="blabla";
%>

</body>

</html>

在eclipse中我收到一个错误

myVar cannot be resolved to a variable
4

1 回答 1

27

这将不起作用,因为您正在尝试使用未定义的变量。代码生成如下:

... = myVar;
//...
String myVar = "blabla";

没有意义,对吧?因此,为了完成这项工作,您应该在使用它之前声明变量(一如既往):

<%
    String myVar="blabla";
%>
<script type="text/javascript">
    foo();
    function foo() {
        var value = "<%=myVar%>";
        alert(value);
    }
</script>

尽管如此,还是非常不鼓励使用 scriptlet 。假设您使用的是JSTL表达式语言(EL),则可以将其重写为:

<c:set name="myVar" value="blabla" />
<script type="text/javascript">  
    foo();
    function foo() {
        var value = "${myVar}";
        alert(value);
    }
</script>

如果您的变量有"内部字符,那么这种方法将失败。您可以使用<c:out>from JSTL 转义结果:

var value = "<c:out value='${myVar}' />";

更多信息:

于 2013-09-24T19:59:05.197 回答