在JavaScript中访问Java / Servlet / JSP / JSTL / EL变量
我在JSP中有一个表单。 我必须根据请求对象(来自servlet)填充它。 如何使用Java脚本访问请求对象属性,或者如果您可以建议我有其他更好的方式来动态填充表单?
你需要认识到Java / JSP只是一个HTML / CSS / JS代码生产者。 因此,您只需让JSP打印Java变量,就好像它是JavaScript变量一样,并且生成的HTML / JS代码输出在语法上是有效的。
假设Java变量在${foo}
的EL范围中可用,以下是几个示例如何打印它:
<script>var foo = '${foo}';</script>
<script>someFunction('${foo}');</script>
<div onclick="someFunction('${foo}')">...</div>
假设Java变量的值为"bar"
,那么JSP将最终生成这个HTML,您可以通过右键单击Webbrowser中的View Source来验证该HTML:
<script>var foo = 'bar';</script>
<script>someFunction('bar');</script>
<div onclick="someFunction('bar')">...</div>
请注意,这些单引号是强制性的,以便在JS中表示字符串类型变量。 如果你已经使用var foo = ${foo};
相反,那么它会打印var foo = bar;
,当你尝试在JS代码中进一步访问它时,可能会出现“bar is undefined”错误(您可以在浏览器的Web开发人员工具集的JS控制台中看到JS错误,您可以通过在Chrome / FireFox23 + IE9 +)。 另外请注意,如果变量表示一个数字或布尔值,不需要引用它,那么它将正常工作。
如果变量恰好来自用户控制输入,请记住要考虑到XSS攻击漏洞和JS转义。 在我们的EL维基页面的底部附近,你可以找到一个例子来说明如何创建一个自定义的EL函数,该函数在JS中转义Java变量以保证安全。
如果变量稍微复杂一点,例如Java bean或其列表或映射,那么可以使用许多可用的JSON库之一将Java对象转换为JSON字符串。 这是一个假设Gson的例子。
String someObjectAsJson = new Gson().toJson(someObject);
请注意,这种方式不再需要将其作为带引号的字符串打印出来。
<script>var foo = ${someObjectAsJson};</script>
也可以看看:
如果您基于HTTP请求中的参数预填充表单字段,那么为什么不在JSP中的服务器端执行此操作?而不是使用JavaScript的客户端? 在JSP中,它看起来像这样:
<input type="text" name="myFormField1" value="<%= request.getParameter("value1"); %>"/>
在客户端,JavaScript并没有真正具有“请求对象”的概念。 您几乎不得不手动解析查询字符串以获取CGI参数。 我怀疑这不是你实际想要做的。
在JSP页面中:
<c:set var="list_size" value="${list1.size() }"></c:set>
在Javascipt页面中使用以下方式访问此值:
var list_size = parseInt($('#list_size').val());
我在外部添加了我的项目中的javascript页面。
链接地址: http://www.djcxy.com/p/46055.html上一篇: Access Java / Servlet / JSP / JSTL / EL variables in JavaScript
下一篇: Call Servlet and invoke Java code from JavaScript along with parameters