Red*_*ddy 14 javascript jsp servlets el parameter-passing
我在JSP中有一个表单.我必须根据请求对象(来自servlet)填充它.如何使用Java Script访问请求对象属性,或者您是否可以建议我以其他方式动态填充表单?
Bal*_*usC 20
您需要意识到Java/JSP仅仅是一个HTML/CSS/JS代码生成器.所以你需要做的就是让JSP打印Java变量,好像它是一个JavaScript变量,并且生成的HTML/JS代码输出在语法上是有效的.
如果Java变量在EL范围中可用,以下${foo}
是几个如何打印它的示例:
<script>var foo = '${foo}';</script>
Run Code Online (Sandbox Code Playgroud)
<script>someFunction('${foo}');</script>
Run Code Online (Sandbox Code Playgroud)
<div onclick="someFunction('${foo}')">...</div>
Run Code Online (Sandbox Code Playgroud)
想象一下,Java变量具有该值"bar"
,然后JSP将最终生成此HTML,您可以通过右键单击webbrowser中的View Source来验证该HTML :
<script>var foo = 'bar';</script>
Run Code Online (Sandbox Code Playgroud)
<script>someFunction('bar');</script>
Run Code Online (Sandbox Code Playgroud)
<div onclick="someFunction('bar')">...</div>
Run Code Online (Sandbox Code Playgroud)
请注意,这些单引号因此是强制性的,以便在JS中表示字符串类型变量.如果您已经使用了var foo = ${foo};
,那么它将打印var foo = bar;
,当您尝试在JS代码中进一步访问它时,可能最终出现"bar is undefined"错误(您可以在浏览器的Web开发人员工具集的JS控制台中看到JS错误)可以通过在Chrome/FireFox23 +/IE9 +中按F12打开.另请注意,如果变量表示数字或布尔值(不需要引用),那么它将正常工作.
如果变量恰好来自用户控制的输入,那么请记住要考虑XSS攻击漏洞和JS转义.在我们的EL维基页面底部附近,您可以找到一个示例,了解如何创建一个自定义EL函数,该函数可以转义Java变量以便在JS中安全使用.
如果变量稍微复杂一些,例如Java bean,或其列表或映射,那么您可以使用许多可用的JSON库之一将Java对象转换为JSON字符串.这是假设Gson的一个例子.
String someObjectAsJson = new Gson().toJson(someObject);
Run Code Online (Sandbox Code Playgroud)
请注意,这样您就不再需要将其作为带引号的字符串打印出来.
<script>var foo = ${someObjectAsJson};</script>
Run Code Online (Sandbox Code Playgroud)
如果您根据HTTP请求中的参数预先填充表单字段,那么为什么不在JSP中的服务器端执行此操作...而不是在客户端使用JavaScript?在JSP中它看起来像这样:
<input type="text" name="myFormField1" value="<%= request.getParameter("value1"); %>"/>
Run Code Online (Sandbox Code Playgroud)
在客户端,JavaScript实际上并没有"请求对象"的概念.您几乎必须自己手动解析查询字符串以获取CGI参数.我怀疑这不是你真正想做的事情.
归档时间: |
|
查看次数: |
40438 次 |
最近记录: |