开发者

Iframe issue in displaying java object

Is it possible to display a java object(by pointing it in iframe src) obtained from a servlet(In a jsp page) in an Iframe?

Here is what I've tried. I'm storing a pdf file in mysql database as blob type. In the Hibernate bean class I have declared the corresponding variable as Byte[].

Now I'm trying to display the object through Iframe like this.

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

 <js开发者_C百科p: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().

Am I right in doing this? how else can I print a java object variable in an Iframe.

Please help me out on this.

Thanks, Aditya


Using EL (Expression Language).

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

JSP coding rule #1: scriptlets are bad. Never use them. Always use Taglibs/EL. If you ever feel the need to write a scriptlet because it's not possible with Taglibs/EL, then the desired code logic simply belongs in a Java class (servlet, bean, filter, dao, etc) and not in a JSP file.

[Edit] as a response to your first comment: the "Resource not available" error message simply means that the URL is plain wrong. Looking at the actual value %5BLjava.lang.Byte;@967e8c it look like you're trying to use the String.valueOf(aByteArray) as URL. This makes no sense. If the ${cusBean.file} actually represents the file contents in flavor of a byte[] (and thus not the file URL), then you need a servlet which does the reading/writing task. All it basically need to do is the following in the 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);
}

Map this servlet in web.xml and call it in the 'src' attribute of your <iframe> element. If necessary you can also pass a parameter or pathinfo so that the servlet knows what PDF file exactly it needs to read into an InputStream. For example

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

and then get the filename as follows:

String fileName = request.getPathInfo();

For more hints you may find this article useful.

Hope this helps.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜