使用JavaScript在浏览器中打印Spring变量

时间:2013-05-19 05:08:50

标签: javascript spring

我正在尝试在if条件下打印变量。它使用Spring和JavaScript完成。我不知道春天。如何在浏览器中打印Spring变量的值?

   <!DOCTYPE html>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
</script>
<script>
$(document).ready(function(){
  $("p").click(function(){
    $(this).hide();
  });
});
</script>
</head>
<body>
<p>If you click on me, I will disappear.</p>
<p>Click me away!</p>
<p>Click me too!</p>
</body>
</html>

1 个答案:

答案 0 :(得分:1)

我会尝试将我对你问题的评论拼凑成答案,因为他们似乎已经解决了这个问题。

您应该首先了解的是服务器端代码解析和执行(适合您的JSP页面)和客户端代码解析和执行之间的区别(适用于您的HTML和JavaScript)。您可以在this programmers.stackexchange.com question的评分最高的答案中阅读简要概述。维基百科在server-side scriptingclient-side scripting上的文章中可以找到进一步的阅读。关于服务器端脚本的客户端脚本文章的一个关键概念是:

  

[服务器端脚本]以Web浏览器(通常为HTML)可理解的格式生成输出,然后将其发送到用户的计算机。用户无法看到脚本的源代码(除非作者单独发布代码),甚至可能不知道脚本已执行。服务器端脚本生成的文档可能反过来包含客户端脚本。

就您的设置而言,这意味着当您通过浏览器请求JSP页面时,您的浏览器会告知托管JSP页面的服务器,浏览器需要该页面。然后,服务器执行JSP页面以生成纯HTML和JavaScript文档(也许是一些CSS,如果你这样写的话),以便发送到浏览器。 浏览器永远不会看到JSP代码。当服务器完成解析和执行JSP页面时,${someExpression}(JSP EL语句)和其他特定于JSP的表达式(如taglib,如<spring:xx>标签)的所有实例都将被解析为一些客户端的等价物。对于基本的JSP EL语句(${...}),这些解析为某些字符串值。如果您巧妙地将该EL语句放在JSP中的某些JavaScript中,例如console.log("${myVariable}");,那么您将动态生成将依赖于EL语句输出的JavaScript代码(在此示例中,它将解析为类似于console.log("myVariable-value");)。

到目前为止,服务器刚刚执行JSP代码(否则页面中的HTML / JS / CSS已经完好无损)。没有解析或执行JavaScript。在服务器完成执行JSP操作之后,这个最终的“渲染”页面将作为纯HTML / JS / CSS发送到客户端浏览器,客户端浏览器接收它并解析/执行它。此时,浏览器会看到类似console.log("myVariable-value");的内容,而不知道或关心您的JSP代码是否生成它,并执行该操作(因为您巧妙地将EL语句放置为生成有效的JS)。

这个冗长的解释意味着您可以执行以下操作:


服务器端JSP:

alert("${createBehavior.behaviorRevisionAllowed}");

从服务器发送到客户端浏览器的结果代码:

alert("false");

在浏览器中执行代码后的结果:弹出alert框,其中包含值false


服务器端JSP:

console.log("${createBehavior.behaviorRevisionAllowed}");

从服务器发送到客户端浏览器的结果代码:

console.log("false");

在浏览器中执行代码后的结果:值false将记录到控制台。


服务器端JSP

return [$('#some-id'), "<spring:message code='BH-MS-0070'/>"];

从服务器发送到客户端浏览器的结果代码:

return [$('#some-id'), "some-spring-message-string"];

在浏览器中执行代码后的结果:创建JavaScript return语句中的数组,并将值"some-spring-message-string"作为第二个元素。


从你关于“EL变量”的评论中的问题,当我说“EL变量”时,我的意思是EL语句,例如${someStatement},可以是一个简单的变量名称语句,例如${createBehavior.behaviorRevisionAllowed}。这个EL语句只会在其中看到变量名,尝试找到该变量并获取其值,然后将${createBehavior.behaviorRevisionAllowed}替换为实际值。

如果需要进一步解释,请告诉我。