在JavaScript中访问Java / Servlet / JSP / JSTL / ELvariables
我在JSP中有一个表单。 我必须根据请求对象(从servlet)填充它。 如何使用Java脚本来访问请求对象的属性,或者如果你可以build议我任何其他更好的方式dynamic填充表单?
您需要认识到Java / JSP只是一个HTML / CSS / JS代码生成器。 因此,您只需让JSP将Javavariables打印为JavaScriptvariables,并且生成的HTML / JS代码输出在语法上是有效的。
假设Javavariables在${foo}
的EL范围中可用,下面是几个如何打印它的例子:
<script>var foo = '${foo}';</script>
<script>someFunction('${foo}');</script>
<div onclick="someFunction('${foo}')">...</div>
想象一下,Javavariables的值是"bar"
,那么JSP将最终生成这个HTML,你可以在web浏览器中右键单击View Source来validation它:
<script>var foo = 'bar';</script>
<script>someFunction('bar');</script>
<div onclick="someFunction('bar')">...</div>
请注意,这些单引号是强制性的,以表示JS中的stringtypesvariables。 如果你已经使用var foo = ${foo};
相反,那么它会打印var foo = bar;
当你试图在JS代码中进一步访问它时,可能会出现“bar is undefined”错误(你可以在浏览器的Web开发者工具集的JS控制台中看到JS错误,你可以通过在Chrome / FireFox23 + IE9 +)。 还要注意,如果variables代表一个数字或布尔值,不需要引用,那么它将正常工作。
如果variables恰好来源于用户控制的input,那么请记住要考虑到XSS攻击漏洞和JS转义 。 在我们的EL维基页面的底部,你可以find一个例子来说明如何创build一个自定义的EL函数来逃避一个Javavariables的安全使用的JS。
如果variables稍微复杂一些,比如说一个Java bean,或者一个列表,或者一个映射,那么你可以使用许多可用的JSON库中的一个将Java对象转换为JSONstring。 这是一个假设Gson的例子。
String someObjectAsJson = new Gson().toJson(someObject);
请注意,这样你就不需要把它作为引用的string了。
<script>var foo = ${someObjectAsJson};</script>
也可以看看:
- 我们的JSP wiki页面 – 请参阅“JavaScript”一章。
- 如何在JSP中转义JavaScript?
- 调用Servlet并从JavaScript调用Java代码以及参数
- 如何使用Servlets和Ajax?
如果您根据HTTP请求中的参数预填充表单字段,那么为什么不在JSP的服务器端执行此操作?而不是使用JavaScript在客户端执行此操作? 在JSP中,它会看起来像这样:
<input type="text" name="myFormField1" value="<%= request.getParameter("value1"); %>"/>
在客户端,JavaScript并不真正具有“请求对象”的概念。 您几乎必须手动parsing查询string以获取CGI参数。 我怀疑这不是你真正想要做的。