【问题标题】:Accessing java variable from javascript on same jsp在同一个jsp上从javascript访问java变量
【发布时间】:2013-09-30 04:56:18
【问题描述】:

是否可以从同一页面上的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

【问题讨论】:

  • 你的 myVar 是在哪里定义的?
  • &lt;%&lt;%= 块按照它们在页面上的顺序进行评估。您需要将声明 myVar 的那个放在使用它的那个之前。
  • 尽管理想情况下,您根本不会使用 scriptlet。
  • 为什么不使用 scriptlet?

标签: java jsp


【解决方案1】:

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

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

没有意义,对吧?所以,为了使这个工作你应该在使用它之前声明变量(一如既往):

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

不过,极不鼓励使用小脚本。假设您使用的是 JSTLExpression Language (EL),这可以重写为:

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

如果你的变量里面有"这样的字符,那么这个方法就会失败。您可以使用 JSTL 中的&lt;c:out&gt; 转义结果:

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

更多信息:

【讨论】:

  • @VgeShi 我知道,这是一个建议。
  • 如果 myVar 包含 " 字符怎么办?没有手动转义这些字符的安全方法吗??
  • @LuiggiMendoza 我想要相反的。我想获取 javascript 值并将其传递给 java 变量
  • @ShaabanEbrahim 为此目的,从您的客户端(javascript)向服务器发送请求。
  • @LuiggiMendoza 我想通过java中的方法加密密码而不需要向服务器发送请求