Hi
I have to show a image loaded from database BLOB field. I implemented
Thiago's suggestion, I have created a page with the following code:

public class ShowImagePage {

    @Inject
    private LinkSource linkSource;
     (...)

    public Link *getUploadedFile*(String imageId) {
            return
linkSource.createPageRenderLink(DisplayImagePage.class.getSimpleName(),
false, new Object[]{imageId});
    }

    public StreamResponse *onActivate*(String imageId) {
        this.filename = imageId;
        return new StreamResponse() {

            public String *getContentType*() {
                return contentType;
            }

            public InputStream *getStream*() throws IOException {
                User user =
(User)_request.getSession(true).getAttribute("user");
                return user.getImage();
            }

            public void *prepareResponse*(Response response) {
                response.setHeader("Content-Disposition", "inline;
filename=" + filename
                            + ((extension == null) ? "" : ("." +
extension)));
            }
        };
    }
 }
**
In the javacode of the page where i have to show the image, I injected the
above page and wrote this method

public Link *getImageLink*(ImageId){
    return showImagewPage.getUploadedFile(imageId);
}
 and in html code I put this:

<img src="${imageLInk}"/>

It works fine, the image is showed but when I refresh the page (with F5),
the image dissapear. It behavior does not occur if I submit some form placed
in the same page that refresh the page too (the method  "onSubmitFrom..."
returns "this" ). I have debugged the code and everything works fine, do you
have any idea about this behavior?

Thanks!!

------------------------------------------------------------------
David Germán Canteros


2011/3/11 Rich M <rich...@moremagic.com>

> Thanks everyone for the responses so far, conceptually I think this is
> coming together for me.
>
> So, I'm glad the context path was not a good idea, it felt dirty from the
> beginning. Avoiding that, there are two main options: use the database to
> store/retrieve the images, or use a configured system folder from where I
> can load/save files with Java IO.
>
> Regardless of the option chosen there, the image file will be captured as
> an InputStream and returned as a StreamResponse in some form to a
> page/component.
>
> As far as linking the StreamResponse to an HTML IMG tag, I believe I
> understand the various options presented here.
>
> LLTYK suggests using an EventLink. I was looking through my code and found
> a Captcha implementation I have using a propertyExpression in the TML on the
> src attribute of <IMG> to reference a getImageLink function that returns
> ComponentResources.**createActionLink("image",null)**. Then there is an
> onImage() action handler method that returns a StreamResponse. I understand
> this is ActionLink and not EventLink, but I think the concept must be nearly
> identical.
>
> Alternately, Thiago is suggesting that instead of using ComponentResources
> to generate an ActionLink or EventLink, it may be easier to create a
> seperate Page that handles returning just a StreamResponse. In that case the
> EventLink can be replaced with a PageLink and using an activation context
> the ID for the Image can be passed to the Page so it can load the Image,
> build the StreamResponse, and return it.
>
> <30 minutes later> Okay, the PageLink works out, great! I can see the
> biggest issue I was having was setting up the src attribute for IMG
> correctly. I was stuck thinking it was either the URL to the context path or
> the StreamResponse itself, rather than a link to an event or page that
> returns the StreamResponse.
>
> Thanks,
> Rich
>
>
>
> On 03/11/2011 08:08 AM, Thiago H. de Paula Figueiredo wrote:
>
>> On Fri, 11 Mar 2011 09:24:35 -0300, LLTYK <ll...@mailinator.com> wrote:
>>
>>  Nobody's mentioned createEventLink. That's where you get the image url,
>>> create an event link pointing to the event handler that returns the
>>> stream response.
>>>
>>
>> I haven't mentioned it because my preferred approach is to create a page
>> just for returning StreamResponses. It's more reusable, as it can be used to
>> serve images for any page, while an event must be only used inside a give
>> page.
>>
>>
>
> ------------------------------**------------------------------**---------
> To unsubscribe, e-mail: 
> users-unsubscribe@tapestry.**apache.org<users-unsubscr...@tapestry.apache.org>
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>

Reply via email to