如何从servlet中调用JavaScript函数

5

我是网站开发的新手。我有一个外部JavaScript文件,其中包含一个函数用于显示带有错误详细信息的提示框。我需要将错误消息传递给该函数。我已经在servlet中编写了控制器。

如何从我的servlet调用那个JavaScript文件的函数。


你的问题毫无意义。JavaScript在用户浏览器中执行,而Servlet在服务器上执行。请重新考虑您真正想要做什么。 - JB Nizet
1
@JBNizet 我认为我们可以从servlet中调用JS。我们可以向浏览器发送响应,在其中创建要调用的脚本。 - Ved
3个回答

5

无法从servlet中调用JavaScript函数。相反,您可以使用

response.getOutputStream().println("[javascript code]");

将JavaScript代码打印到浏览器中,然后在浏览器中执行JavaScript函数。


这对我不起作用 :( 它只是在浏览器上平淡地打印出 JavaScript,而没有执行此代码。请帮帮我。这就是我正在做的,response.getOutputStream().println("var ps = document.getElementsByClassName("messages");" + "ps.innerHtm="完成" "); - Vasanth Nag K V
你必须在你的 JavaScript 代码中使用脚本标签,例如 response.getOutputStream().println("<script type='text/javascript'>var ps = document.getElementsByClassName("messages");" + "ps.innerHtm="DONE";</script>");。 - Ravindra Gullapalli

2
您可以使用以下方法来实现类似的行为。在发送响应时,您可以提供JS事件。
PrintWriter out = response.getWriter();
out.println("<tr><td><input type='button' name='Button' value='Search' onclick=\"searchRecord('"+ argument + "');\"></td></tr>");

当您单击搜索按钮时,JS的搜索记录方法将被调用。

2
你需要明白的是,Servlet 运行在 Web 服务器中而非 Web 浏览器中,而 JavaScript 运行在 Web 浏览器中而非 Web 服务器中。通常的做法是让 Servlet 将请求转发到 JSP 文件,然后 JSP 文件生成 HTML/CSS/JS 代码,并由 Web 服务器将其发送到 Web 浏览器。最终,所有的 HTML/CSS/JS 代码都在 Web 浏览器中执行。
为了实现你(有点奇怪,说实话)的功能要求,只需让转发的 JSP 有条件地呈现特定的脚本调用即可。例如,使用 JSTL 的 <c:if>,假设你已经将错误以 JSON 数组格式收集并设置为 ${errors}
<c:if test="${not empty errors}">
    <script>displayErrors(errors);</script>
</c:if>

或者让JSP将其分配为JS变量,然后让JS进一步处理它。类似这样的形式:
<script>
    var errors = ${errors};

    if (errors.length) {
        displayErrors(errors);
    }
</script>

关于奇怪的需求,如果您被迫使用JS来显示消息,那只能意味着您正在使用alert()或类似的东西。这非常90年代,不够用户友好。让JSP相应地生成HTML,使它们放在输入字段旁边或者在表单顶部的列表中。 我们的servlets wiki页面有一个"Hello World"示例,就是这样做的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接