我希望传递一个 servlet 变量 myVar,它被传递到 JSP 页面,并将它传递给 JavaScript。 JavaScript 是包含在 JSP 页面中的外部 javascript。
我有一个调用 JavaScript 函数的按钮,但我无法通过 servlet 传递任何传递到 JSP 页面的变量。该按钮不是表单的一部分。
我试过在 JavaScript 中调用一个函数:
var x = '<%=myVar%>';
和
var x = '${myVar}';
和
var x = '<%= (String)request.getParameter("myVar") %>';
但是,x
始终是我输入的字符串。
我没有使用 AJAX 或 JQuery。有什么想法吗?
示例代码是一个简化版本:(所以按钮实际上是一个下拉菜单,当我更改值时调用 js,但是,我希望在 changeCLass 中调用不属于下拉菜单的其他变量)
Servlet 端:
request.setAttribute("otherVars","tests");
JSP:
<script type="text/javascript" src="external.js"></script>
<select name="vars" id="myVars" onchange="changeClass(this)">
<option value='1' selected="selected">1</option>
</select>
JSP 中包含的 external.js:
function changeClass(newVarX) {
var newVarId =newVarX.value;
var tID = '${otherVars}';
alert(newVarId + " " + tID);
}
输出: 1 $(其他变量}
但输出应该是: 1 个测试
请您参考如下方法:
这不起作用,因为服务器不处理您的 JavaScript 文件。可能的解决方案是:
在 JSP 文件中全局声明变量
tID
。JSP:
<script type="text/javascript" src="external.js"></script> <script type="text/javascript"> var tID = '${otherVars}'; </script> <select name="vars" id="myVars" onchange="changeClass(this)"> <option value='1' selected="selected">1</option> </select>
JavaScript(外部.js):
function changeClass(newVarX) { var newVarId = newVarX.value; alert(newVarId + " " + tID); }
同时处理 JavaScript 文件。您可以为 JavaScript 使用 JSP 文件并应用正确的内容类型:
JSP:
<script type="text/javascript" src="external.jsp"></script> <select name="vars" id="myVars" onchange="changeClass(this)"> <option value='1' selected="selected">1</option> </select>
JavaScript(external.jsp --> 注意,它也是一个 JSP 文件,但内容类型设置为文本/javascript):
<%@ page language="java" contentType="text/javascript; charset=UTF-8" pageEncoding="UTF-8"%> function changeClass(newVarX) { var newVarId = newVarX.value; var tID = '${otherVars}'; alert(newVarId + " " + tID); }