正如@CarlosGavidia(秘鲁研究员)所解释的,脚本在服务器端运行,而 JavaScript(以及在其之上的其他框架,如 jQuery 或 Dojo)在客户端运行,例如在浏览器客户端中。此外,极不鼓励使用 scriptlet ,详细说明请参见:如何避免 JSP 文件中的 Java 代码?
如果您访问了最后一个链接,您就会知道应该使用EL和JSTL来访问您的页面上下文 (PageContext)、请求 (ServletRequest)、会话 (HttpSession) 和/或应用程序 (ServletContext) 属性(更多相关信息:如何通过 c:set 向 jsp:include 传递参数?JSP 中变量的作用域是什么?)。
有了这个背景,现在您可以理解不能直接访问请求属性(或 Java 代码中的其他属性),除非它们被设置为 DOM 的一部分或注入到 javascript 代码中。显示两种情况的示例:
将请求属性设置为 DOM 的一部分。
<input type="hidden" id="hidReqAttr" value="${location}" />
<script type="text/javascript">
function foo() {
var fromJavaSide = document.getElementById("hidReqAttr").value;
//fromJavaSide value will be ${location}
}
</script>
直接在 JavaScript 上注入请求属性。
<script type="text/javascript">
function foo() {
var fromJavaSide = '<c:out value="${location}" />';
//fromJavaSide value will be ${location} as string
}
</script>
请注意,使用这些方法中的任何一种都意味着您可以使用 JavaScript 操作 Java 服务器变量值,但只能在 JavaScript 端工作,不会影响在服务器端设置的请求属性值。换句话说:
<script type="text/javascript">
function foo() {
var fromJavaSide = '<c:out value="${location}" />';
//fromJavaSide value will be ${location} as string
fromJavaSide = fromJavaSide + '_modified';
//last line affects only the JavaScript variable, not the request attribute value
}
</script>
因此,如果进入“td”元素的位置之一是“USA”,我的 Javascript 函数将对“USA”元素执行一些特定的操作,例如将周围的边框设置为红色、白色和蓝色。
使用带有 ID 的 HTML 组件或将 CSS 类名称应用于您的<td>
,以了解您将在哪里获得所需的值。使用"USA"
为例:
<td class="${location eq 'USA' ? 'usaStyle' : 'commonStyle'}">${location}</td>
<script type="text/javascript">
function foo() {
var usaTDs = document.getElementsByClassName('usaStyle');
//now you have all TDs with usaStyle that has your `USA` text
}
</script>
根据您的评论,您还希望访问请求参数(可能来自查询字符串)。用来${param.parameterName}
获取它们。上面的 EL 链接中的更多信息,请查看解释获取请求参数和其他功能的隐式 EL 对象部分。