2011-02-08 28 views
0

我有一个很奇怪的问题,这里有云:的out.print不是在Java方法工作在JSP

我有一个jsp页面,在这个JSP,还有是从另一个JSP部分内容的iframe。我想这个iframe被刷新在<body onload="blabla"..>

所以我试图做的是,我将静态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“未找到”。我可以在方法外部使用out.print,但不能在方法内部使用。我如何在refreshiframe()方法中使用out.print?还是有更好的方法来解决这个问题?谢谢。

回答

4

确实,您的confusing Java/JSP with JavaScript。

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

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

,给你元素的id="frameId"

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

非常感谢你,这正是我正在寻找的答案。 – 2011-02-08 13:08:49

4

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

这是行不通的。

看看你的要求是如何处理的:

  1. 客户端(浏览器)发送一个HTTP请求到服务器
  2. 服务器通过执行JSP处理该请求(即Java代码)
  3. 的JSP(一些HTML代码)的结果被发送到客户端
  4. 的客户端显示所得到的HTML,潜在地执行在它
JavaScript代码

正如你所看到的,你的refreshiframe()方法甚至不存在在解释onload属性的时间(和地点)存在(步骤#4)。

另外,关于编译错误:在JSP中定义一个新的方法。该方法只能访问它的参数,所以如果你想要它打印输出的东西,你需要通过out作为参数。

0

只要声明该方法采取一个参数,然后调用它作为refreshiframe(out)

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