在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>

也可以看看:

  • 我们的JSP wiki页面 - 请参阅“JavaScript”一章。
  • 如何在JSP中转义JavaScript?
  • 调用Servlet并从JavaScript调用Java代码以及参数
  • 如何使用Servlets和Ajax?

  • 如果您基于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