out.print在jsp中的java方法中不起作用

时间:2011-02-08 12:25:01

标签: java html jsp printing methods

我有一个非常奇怪的问题,在这里:

我有一个jsp页面,在这个jsp中,有一个iframe显示来自另一个jsp的一些内容。我希望在<body onload="blabla"..>

中刷新此iframe

所以我试图做的是,我将静态HTML iframe代码转换为方法中的java代码。所以它是这样的:

。 。 这里的HTML ...

<iframe ... blabla>
</iframe

这里有HTML .. 。

我这样做了:

<body onload="refreshiframe();">

。 。 这里的HTML ...

<%! void refreshiframe()
{
out.print("<iframe.. blabla> </iframe>");
}
%>

这里的HTML ... 。

但问题是,refreshiframe中的out.print会产生编译错误。我的编译器jdeveloper 10g特别说“找不到变量”。我可以在方法之外使用out.print但不在方法内部。如何在refreshiframe()方法中使用out.print?还是有更好的方法来解决这个问题?谢谢。

3 个答案:

答案 0 :(得分:4)

您正在尝试在生成的HTML中将JSP中声明的Java方法作为JavaScript方法执行。

那不行。

了解您的请求是如何处理的:

  1. 客户端(浏览器)向服务器发送HTTP请求
  2. 服务器通过执行JSP(即您的Java代码)来处理该请求
  3. JSP的结果(某些HTML代码)被发送到客户端
  4. 客户端显示生成的HTML,可能在其中执行JavaScript代码
  5. 正如您所看到的,refreshiframe()方法在解释onload属性的时间(和地点)甚至存在(步骤#4)。

    另外,关于编译错误:在JSP中定义一个新方法。该方法只能访问其参数,因此如果您希望它将某些内容输出到输出,则需要将out作为参数传递给它。

答案 1 :(得分:4)

的确,你是使用JavaScript的confusing Java / JSP。

<body onload>应该指向JavaScript函数,而不是Java / JSP方法。如果我理解你,你想刷新/重新加载iframe的内容吗?如果是这样,请将以下内容添加到HTML文档的<head>

<script>
    function refreshiframe() {
        document.getElementById('frameId').contentWindow.location.reload();
    }
</script>

并将<iframe>元素设为id="frameId"

<iframe id="frameId"></iframe>

答案 2 :(得分:0)

只需声明该方法以获取参数,然后将其作为refreshiframe(out)调用。

编辑:我完全错过了您将此方法称为JavaScript事件处理程序。 (请参阅Joachim的答案以获得一个很好的解释)