0

我正在使用带有 Tomcat 的 Java servlet 以 HTML 格式显示位置表。表行中的数据由名称、位置等信息组成,是通过获取 servlet 响应数据并将其注入标签中获得的。然而,一旦完成,我需要使用 Javascript 根据它们的值来操作“td”元素。因此,如果进入“td”元素的位置之一是“USA”,我的 Javascript 函数将对“USA”元素执行一些特定的操作,例如将周围的边框设置为红色、白色和蓝色。

我不想使用 $.ajax 发送请求。我只是想在脚本元素的范围内访问由 servlet 响应返回的属性,就像我使用 JSP scriptlet 以以下方式一样

<% request.getAttribute("location"); %>

我有点惊讶我还没有找到如何在线执行此操作,因为这似乎是任何使用 servlet 和 JS 的人的日常操作,但我在 SO 和 Google 上进行了搜索,但无济于事。

4

3 回答 3

5

正如@CarlosGavidia(秘鲁研究员)所解释的,脚本在服务器端运行,而 JavaScript(以及在其之上的其他框架,如 jQuery 或 Dojo)在客户端运行,例如在浏览器客户端中。此外,极不鼓励使用 scriptlet ,详细说明请参见:如何避免 JSP 文件中的 Java 代码?

如果您访问了最后一个链接,您就会知道应该使用ELJSTL来访问您的页面上下文 (PageContext)、请求 (ServletRequest)、会话 (HttpSession) 和/或应用程序 (ServletContext) 属性(更多相关信息:如何通过 c:set 向 jsp:include 传递参数?JSP 中变量的作用域是什么?)。

有了这个背景,现在您可以理解不能直接访问请求属性(或 Java 代码中的其他属性),除非它们被设置为 DOM 的一部分或注入到 javascript 代码中。显示两种情况的示例:

  1. 将请求属性设置为 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>
    
  2. 直接在 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 对象部分。

于 2013-07-17T19:24:26.680 回答
0

HTML DOM 操作应使用 JavaScript 完成。JSP/Servlet 是服务器端编程技术,HTTPServletRequest无法通过 JavaScript 访问对象:实例存在于 Servlet 容器中,而 JavaScript 在客户端浏览器中执行。

另一方面,我认为TD通过纯 JavaScript 更改标签内容没有问题。您可以使用 Dojo 或 JQuery 之类的工具包来简化此任务。

于 2013-07-17T15:48:51.300 回答
0
using ajax cal we can cal directly to our servlet class and   servlet return string in json format(using gson lib) we can parse json using jquery parse method     
 $.ajax({
        url: "controller/url", 
         success: function(result){
                alert(result);
            }});
于 2017-03-02T14:33:41.307 回答