在JavaScript中访问Java / Servlet / JSP / JSTL / EL变量

brjng4g3  于 2022-12-07  发布在  Java
关注(0)|答案(5)|浏览(131)

我在JSP中有一个表单。我必须根据请求对象(来自servlet)填充它。我如何使用Java脚本访问请求对象属性,或者您是否可以建议我使用其他更好的方法来动态填充表单?

icnyk63a

icnyk63a1#

你需要意识到Java/JSP仅仅是一个HTML/CSS/JS代码生成器,所以你需要做的就是让JSP打印Java变量,就像它是一个JavaScript变量一样,并且生成的HTML/JS代码输出在语法上是有效的。
假设${foo}在EL范围内可以使用Java变量,下面是几个如何打印它的示例:
第一个
假设Java变量的值为"bar",那么JSP最终将生成此HTML,您可以通过在Web浏览器中右键单击 View Source 来验证它:
第一个
请注意,为了在JS中表示字符串类型的变量,这些单引号是强制性的。如果您使用的是var foo = ${foo};,那么它将打印var foo = bar;。当您尝试在JS代码中进一步访问它时,可能会在中出现“bar is undefined”错误(您可以在浏览器的Web开发者工具集的JS控制台中看到JS错误,您可以在Chrome/FireFox 23 +/IE9+中按F12打开该工具集)。还请注意,如果变量代表数字或布尔值,不需要引用,它就能正常工作。
如果变量来自于用户控制的输入,那么请记住要考虑XSS attack holes和JS转义。在our EL wiki page的底部,你可以找到一个例子,如何创建一个自定义的EL函数,该函数转义一个Java变量,以便在JS中安全使用。
如果变量比较复杂,比如一个Java bean,或者一个列表,或者一个Map,那么你可以使用JSON libraries把Java对象转换成JSON字符串。

String someObjectAsJson = new Gson().toJson(someObject);

请注意,这样您就不需要再将其打印为带引号的字符串。

<script>var foo = ${someObjectAsJson};</script>

另请参阅:

c86crjj0

c86crjj02#

如果您要根据HTTP请求中的参数预先填充表单字段,那么为什么不简单地在JSP中的服务器端执行此操作...而不是使用JavaScript在客户端执行此操作?在JSP中,它看起来大致如下:

<input type="text" name="myFormField1" value="<%= request.getParameter("value1"); %>"/>

在客户端,JavaScript并没有真正的“请求对象”的概念。你几乎必须自己手动解析查询字符串来获取CGI参数。我怀疑这不是你真正想要做的。

kdfy810k

kdfy810k3#

将JSON从JSP传递到Javascript。

我来这里就是为了找这个,@BalusC的回答在一定程度上帮了忙,但并没有彻底解决问题,在深入挖掘<script>标签后,我偶然发现了这个解决方案。
<script id="jsonData" type="application/json">${jsonFromJava}</script>
在JS中:
var fetchedJson = JSON.parse(document.getElementById('jsonData').textContent);

cnh2zyt3

cnh2zyt34#

在JSP文件中:
第一个
然后,在上述代码之后声明的.js文件将可以使用此常量变量。
Constants.java 是包含名为CONSTANT的静态常量的java文件。
我遇到的情况是,我需要一个属性文件中的常量,所以我没有为javascript构造一个属性文件,而是这样做了。

anhgbhbe

anhgbhbe5#

在JSP页面中:

<c:set var="list_size" value="${list1.size() }"></c:set>

在Javascipt页面中使用以下方法访问此值:

var list_size = parseInt($('#list_size').val());

我在我的项目外部添加了javascript页面。

相关问题