iframe在显示java对象时出现问题

时间:2009-11-05 11:25:29

标签: java html jsp iframe

是否可以在iframe中显示从servlet(在jsp页面中)获取的java对象(通过指向iframe src)?

这是我尝试过的。 我将一个pdf文件存储在mysql数据库中作为blob类型。在Hibernate bean类中,我已将相应的变量声明为Byte []。

现在我试图像这样通过Iframe显示对象。

<% String oid = null;
    oid = request.getAttribute("oid").toString();
     request.setAttribute("oid",oid);
  %>

 <jsp:useBean id="cusBean" class="com.zoran.action.CustomBean" scope="page" >
 <jsp:setProperty name="cusBean" property="parentId" value="1" />
 <jsp:setProperty name="cusBean" property="parentType" value="FILE" />
 </jsp:useBean>

<iframe id="displayFrame" src="<%= cusBean.getFile() %>"  width="1000" height="500" FRAMEBORDER="0" value="1"></iframe>

And custom bean is the java class where I'm running the hql script to return the blob data through cusBean.getFile().

我这样做是对的吗?我怎样才能在iframe中打印java对象变量。

请帮我解决这个问题。

谢谢, 阿迪亚

1 个答案:

答案 0 :(得分:1)

使用EL (Expression Language)

<iframe src="${cusBean.file}">

JSP编码规则#1: scriptlet不好。切勿使用它们。始终使用Taglibs / EL。如果你觉得需要编写一个scriptlet因为Taglibs / EL不可能,那么所需的代码逻辑只属于Java类(servlet,bean,filter,dao等)而不是JSP文件。

[编辑]作为对您的第一条评论的回复:“资源不可用”错误消息仅表示该网址错误。查看实际值%5BLjava.lang.Byte;@967e8c,您似乎尝试使用String.valueOf(aByteArray)作为网址。这毫无意义。如果$ {cusBean.file}实际上表示文件内容的风格为byte[](因此不是文件 URL ),那么您需要一个servlet这是读/写任务。所有它基本上需要做的是doGet()中的以下内容:

// Init servlet response.
response.reset();
response.setContentType("application/pdf");
response.setHeader("Content-disposition", "inline; filename=\"yourname.pdf\"");

// Init streams.
BufferedInputStream input = null;
BufferedOutputStream output = null;

try {
    // Preferably use InputStream, not byte[] as it is memory hogging.
    input = new BufferedInputStream(getPdfAsInputStream());
    output = new BufferedOutputStream(response.getOutputStream());

    // Write file contents to response.
    byte[] buffer = new byte[8192];
    int length;
    while ((length = input.read(buffer)) > 0) {
        output.write(buffer, 0, length);
    }
} finally {
    close(output);
    close(input);
}

在web.xml中映射此servlet,并在<iframe>元素的'src'属性中调用它。如有必要,您还可以传递参数或pathinfo,以便servlet确切地知道需要将哪个PDF文件读入InputStream。例如

<iframe src="pdfservlet/${cusBean.fileName}">

然后获取如下文件名:

String fileName = request.getPathInfo();

有关更多提示,您可能会发现this article有用。

希望这有帮助。