使用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>

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

您首先应该了解的是服务器端代码解析和执行(对您来说是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"];

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


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

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

相关内容

最新更新