Hi

I hope I can use wicket to serve image data.
I know I can extend org.apache.wicket.markup.html.image.Image and provide a
DynamicImageResource
but the generated image link is
http://localhost/app/?wicket:interface=:0:customImage::IResourceListener::
The image data is stored in the session and not bookmarkable, which is not
what I want.


I then created an ImagePage extends WebPage and override onBeforeRender()  ,
and coding below :
HttpServletResponse response = ((WebResponse)
getWebRequestCycle().getResponse()).getHttpServletResponse();
    try
    {
      response.setContentType("image/png");

      OutputStream responseOutputStream = response.getOutputStream();

      responseOutputStream.write(myImageBytes);
      responseOutputStream.flush();
      responseOutputStream.close();
    }
    catch (IOException e)
    {
      e.printStackTrace();
    }

It works !!! And I can bookmark the image.

But there are warning output :

2008-12-26 02:20:42,919 ERROR wicket.RequestCycle -
org.apache.wicket.Component has not been properly rendered. Something in the
hierarchy of foo.bar.ImagePage has not called super.onBeforeRender() in the
override of onBeforeRender() method
java.lang.IllegalStateException: org.apache.wicket.Component has not been
properly rendered. Something in the hierarchy of foo.bar.ImagePage has not
called super.onBeforeRender() in the override of onBeforeRender() method
        at
org.apache.wicket.Component.internalBeforeRender(Component.java:1006)
        at org.apache.wicket.Component.beforeRender(Component.java:1034)
        at org.apache.wicket.Component.prepareForRender(Component.java:2160)

Is this the "standard" way of outputing binary data ?
If not , what is the better way  (wicket 1.3.5) ?

thanks.

Reply via email to