访问javascript中的java/servlet/jsp/jstl/el变量

q0qdq0h2  于 2021-07-09  发布在  Java
关注(0)|答案(4)|浏览(317)

我有一个jsp表单。我必须根据请求对象(来自servlet)填充它。如何使用java脚本访问请求对象属性,或者您是否可以建议其他更好的动态填充表单的方法?

2izufjch

2izufjch1#

如果您是基于http请求中的参数预填充表单字段,那么为什么不在jsp的服务器端执行此操作。。。而不是在客户端使用javascript?在jsp中,它看起来像这样:

<input type="text" name="myFormField1" value="<%= request.getParameter("value1"); %>"/>

在客户端,javascript实际上没有“请求对象”的概念。您几乎必须自己手动解析查询字符串才能获得cgi参数。我想那不是你真正想做的。

k2arahey

k2arahey2#

在jsp页面中:

<c:set var="list_size" value="${list1.size() }"></c:set>

在javascipt页中使用以下方法访问此值:

var list_size = parseInt($('#list_size').val());

我在项目外部添加了javascript页面。

iqxoj9l9

iqxoj9l93#

您需要认识到java/jsp仅仅是一个html/css/js代码生成器。因此,您只需让jsp打印java变量,就好像它是javascript变量一样,并且生成的html/js代码输出在语法上是有效的。
前提是java变量在el范围内可用 ${foo} ,下面是几个如何打印的示例:

<script>var foo = '${foo}';</script>
<script>someFunction('${foo}');</script>
<div onclick="someFunction('${foo}')">...</div>

假设java变量具有 "bar" ,然后jsp将最终生成此html,您可以通过右键单击在webbrowser中查看源代码进行验证:

<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+中按f12打开该工具集。还要注意的是,如果变量表示一个数字或布尔值,不需要加引号,那么它就可以正常工作。
如果变量恰好来自用户控制的输入,那么请记住要考虑xss攻击漏洞和js转义。在elwiki页面的底部,您可以找到一个示例,说明如何创建一个自定义el函数,该函数转义java变量,以便在js中安全使用。
如果变量稍微复杂一点,例如javabean、其列表或Map,那么可以使用许多可用的json库中的一个将java对象转换为json字符串。下面是一个假设gson的例子。

String someObjectAsJson = new Gson().toJson(someObject);

请注意,这样您就不需要再将其打印为带引号的字符串了。

<script>var foo = ${someObjectAsJson};</script>

另请参见:

我们的jspwiki页面-请参阅“javascript”一章。
如何在jsp中转义javascript?
调用servlet并从javascript调用java代码以及参数
如何使用servlet和ajax?

h9vpoimq

h9vpoimq4#

在jsp文件中:

<head>
...
<%@ page import="com.common.Constants" %>
...
</head>
<script type="text/javascript"> 
        var constant = "<%=Constants.CONSTANT%>"
</script>

然后,在上述代码之后声明的.js文件将可以使用此常量变量。
java是一个包含名为constant的静态常量的java文件。
我的场景是,我需要属性文件中的一个常量,所以我没有为javascript构建属性文件,而是这样做了。

相关问题