我在JSP中有一个表单。我必须根据请求对象(来自servlet)填充它。我如何使用Java脚本访问请求对象属性,或者您是否可以建议我使用其他更好的方法来动态填充表单?
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字符串。
${foo}
"bar"
var foo = ${foo};
var foo = bar;
String someObjectAsJson = new Gson().toJson(someObject);
请注意,这样您就不需要再将其打印为带引号的字符串。
<script>var foo = ${someObjectAsJson};</script>
c86crjj02#
如果您要根据HTTP请求中的参数预先填充表单字段,那么为什么不简单地在JSP中的服务器端执行此操作...而不是使用JavaScript在客户端执行此操作?在JSP中,它看起来大致如下:
<input type="text" name="myFormField1" value="<%= request.getParameter("value1"); %>"/>
在客户端,JavaScript并没有真正的“请求对象”的概念。你几乎必须自己手动解析查询字符串来获取CGI参数。我怀疑这不是你真正想要做的。
kdfy810k3#
将JSON从JSP传递到Javascript。
我来这里就是为了找这个,@BalusC的回答在一定程度上帮了忙,但并没有彻底解决问题,在深入挖掘<script>标签后,我偶然发现了这个解决方案。<script id="jsonData" type="application/json">${jsonFromJava}</script>在JS中:var fetchedJson = JSON.parse(document.getElementById('jsonData').textContent);
<script>
<script id="jsonData" type="application/json">${jsonFromJava}</script>
var fetchedJson = JSON.parse(document.getElementById('jsonData').textContent);
cnh2zyt34#
在JSP文件中:第一个然后,在上述代码之后声明的.js文件将可以使用此常量变量。Constants.java 是包含名为CONSTANT的静态常量的java文件。我遇到的情况是,我需要一个属性文件中的常量,所以我没有为javascript构造一个属性文件,而是这样做了。
anhgbhbe5#
在JSP页面中:
<c:set var="list_size" value="${list1.size() }"></c:set>
在Javascipt页面中使用以下方法访问此值:
var list_size = parseInt($('#list_size').val());
我在我的项目外部添加了javascript页面。
5条答案
按热度按时间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字符串。
请注意,这样您就不需要再将其打印为带引号的字符串。
另请参阅:
c86crjj02#
如果您要根据HTTP请求中的参数预先填充表单字段,那么为什么不简单地在JSP中的服务器端执行此操作...而不是使用JavaScript在客户端执行此操作?在JSP中,它看起来大致如下:
在客户端,JavaScript并没有真正的“请求对象”的概念。你几乎必须自己手动解析查询字符串来获取CGI参数。我怀疑这不是你真正想要做的。
kdfy810k3#
将JSON从JSP传递到Javascript。
我来这里就是为了找这个,@BalusC的回答在一定程度上帮了忙,但并没有彻底解决问题,在深入挖掘
<script>
标签后,我偶然发现了这个解决方案。<script id="jsonData" type="application/json">${jsonFromJava}</script>
在JS中:
var fetchedJson = JSON.parse(document.getElementById('jsonData').textContent);
cnh2zyt34#
在JSP文件中:
第一个
然后,在上述代码之后声明的.js文件将可以使用此常量变量。
Constants.java 是包含名为CONSTANT的静态常量的java文件。
我遇到的情况是,我需要一个属性文件中的常量,所以我没有为javascript构造一个属性文件,而是这样做了。
anhgbhbe5#
在JSP页面中:
在Javascipt页面中使用以下方法访问此值:
我在我的项目外部添加了javascript页面。