从JavaScript读取JSP变量

Sid*_*qui 57 javascript java jsp

如何从JavaScript读取/访问JSP变量?

Jig*_*shi 78

alert("${variable}");
Run Code Online (Sandbox Code Playgroud)

要么

alert("<%=var%>");
Run Code Online (Sandbox Code Playgroud)

或完整的例子

<html> 
<head>
<script language="javascript"> 

function access(){ 
  <% String str="Hello World"; %>
   var s="<%=str%>"; 
   alert(s); 
} 

</script> 
</head> 

<body onload="access()"> 
</body> 

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

注意:在渲染之前清理输入,它可能会打开很多XSS的可能性

  • 我希望这个例子能让它现在起作用:) (3认同)
  • 同时阅读本文,它非常清楚地阐述了JS和JSP的概念 - http://balusc.blogspot.in/2009/05/javajspjsf-and-javascript.html (2认同)
  • 不好的例子,正是因为@NagaSrinuKapusetti提到的.如果您将此用于任何用户输入,那么您将进入一个充满烦恼的世界. (2认同)

Adr*_* Be 23

据我所知,这是最干净的方式:

  1. 将JSP变量添加到HTML元素的data-*属性中
  2. 然后在需要时通过Javascript读取此值

我对这个SO页面上当前解决方案的看法:在实际的javascript代码中使用java scriplet"直接"读取JSP值可能是你可以做的最令人作呕的事情.让我想要呕吐.哈哈.说真的,尽量不去做.

没有JSP的HTML部分:

<body data-customvalueone="1st Interpreted Jsp Value" data-customvaluetwo="another Interpreted Jsp Value">
    Here is your regular page main content
</body>
Run Code Online (Sandbox Code Playgroud)

使用JSP时的HTML部分:

<body data-customvalueone="${beanName.attrName}" data-customvaluetwo="${beanName.scndAttrName}">
    Here is your regular page main content
</body>
Run Code Online (Sandbox Code Playgroud)

javascript部分(为简单起见使用jQuery):

<script type="text/JavaScript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.js"></script>
<script type="text/javascript">
    jQuery(function(){
        var valuePassedFromJSP = $("body").attr("data-customvalueone");
        var anotherValuePassedFromJSP = $("body").attr("data-customvaluetwo");

        alert(valuePassedFromJSP + " and " + anotherValuePassedFromJSP + " are the values passed from your JSP page");
});
</script>
Run Code Online (Sandbox Code Playgroud)

这里有jsFiddle在行动中看到这个http://jsfiddle.net/6wEYw/2/

资源:

  • 这是一个很好的做法:分离关注点.它允许在一个专用文件中移动你的javascript代码(你应该).此文件通常由您的CDN自动缩小.它更加通用和可扩展.另一个优点是,在团队中工作时,后端人员可以告诉前端人员"嘿,我将这些动态值放在数据属性x&y中,它已经准备就绪".哦,你不能调试内联JavaScript. (2认同)

Que*_*tin 12

假设您正在讨论HTML文档中的JavaScript.

您无法直接执行此操作,因为就JSP而言,它是输出文本,就页面而言,它只是获取HTML文档.

您必须生成JavaScript代码来实例化变量,注意转义 JS中具有特殊含义的任何字符.如果您只是转储数据(正如其他一些答案所建议的那样),当数据包含新行,引用字符等时,您会发现它会丢失.

最简单的方法是使用JSON库(在http://json.org/的底部列出了一堆),然后使用JSP输出:

<script type="text/javascript">
    var myObject = <%= the string output by the JSON library %>;
</script>
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个可以访问的对象:

myObject.someProperty
Run Code Online (Sandbox Code Playgroud)

在JS中.

  • `{"someProperty":"some \"value \"\n with a new line"}` (2认同)

小智 6

   <% String s="Hi"; %>
   var v ="<%=s%>"; 
Run Code Online (Sandbox Code Playgroud)