1

我试图在执行转发之前在 jsp 页面的正文中用 javascript 发出一条消息并且它没有被执行。

这是代码

<%
...
out.write("<script type='text/javascript'>\n");
out.write("alert( " + "' Hello '" + ");\n");
out.write("</script>\n");

request.getRequestDispatcher("secondpage.jsp").forward(request, response);
%>

在这里,我想在将控件传递给另一个 jsp 页面之前提醒消息。我该怎么做。在这里,如果我删除转发部分,警报消息将显示在警报框中。

4

2 回答 2

3

forward替换不发送到浏览器的页面内容。

由于浏览器甚至没有收到您编写的脚本,因此无法执行它。

假设您希望用户在重定向前一秒看到警报,您可以这样做:

<%
out.write("<script type='text/javascript'>\n");
out.write("alert(' Hello ');\n");
out.write("setTimeout(function(){window.location.href='secondpage.jsp'},1000);");
out.write("</script>\n");
%>
于 2012-11-09T12:29:31.843 回答
2

为什么你在 JSP 中通过 Java scriptlet编写 JS 代码,而 JSP 本身已经提供了一个很好的模板来编写 HTML/JS 代码?

无论如何,只需使用 JS 来执行重定向而不是 JSP。您知道,Java/JSP 在网络服务器上运行并生成 HTML/JS,而后者又仅在网络浏览器中运行。转发基本上替换了请求/响应目标,如果响应未提交,它会丢弃预先写入响应缓冲区的所有内容。

以下是您可以在普通 HTML/JS 中执行此操作的方法:

<script>
    alert('Hello');
    window.location = 'secondpage.jsp';
</script>

而已。看,你根本不需要把它放在一些scriptlet ugliness 中。只需将其完整地放入 JSP 文件中即可。

于 2012-11-09T12:54:54.327 回答