0

我正在尝试打印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>
4

1 回答 1

1

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

您首先应该了解的是服务器端代码解析和执行(为您提供 JSP 页面)与客户端代码解析和执行(为您提供 HTML 和 JavaScript)之间的区别。您可以在这个programmers.stackexchange.com 问题的最受好评的答案中阅读简要概述。可以在 Wikipedia 关于服务器端脚本客户端脚本的文章中找到进一步阅读。从关于服务器端脚本的客户端脚本文章中删除的一个关键概念是:

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

就您的设置而言,这意味着当您通过浏览器请求 JSP 页面时,您的浏览器会告诉托管 JSP 页面的服务器,浏览器需要该页面。然后,服务器执行 JSP 页面以生成一个纯 HTML 和 JavaScript 的文档(如果您以这种方式编写的话,可能还有一些 CSS)以发送到浏览器。浏览器永远不会看到 JSP 代码。当服务器完成解析和执行 JSP 页面时,${someExpression}(JSP EL 语句)和其他特定于 JSP 的表达式(例如标记库,类似<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"];

代码在浏览器中执行后的结果: JavaScriptreturn语句中的数组是以该值"some-spring-message-string"作为第二个元素创建的。


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

让我知道是否需要进一步解释。

于 2013-05-20T04:37:39.043 回答