The real issue is more likely the first point, you're getting your
InputStream from an object from the session. Does calling getImage()
return a new InputStream every time?

On Fri, Aug 5, 2011 at 2:44 PM, David Canteros
<davidcanteros....@gmail.com> wrote:
> Hi Josh;
>           I have already tried with PageRenderLinkSource but It has the
> same behavior.  I did not know the difference between LinkSource and
> PageRenderLinkSource, thanks for the information!
>
> David
>
> ------------------------------------------------------------------
> David Germán Canteros
>
>
> 2011/8/5 Josh Canfield <joshcanfi...@gmail.com>
>
>> Also.
>> >    private LinkSource linkSource;
>>
>> This is an internal class, you should be using PageRenderLinkSource.
>> You can replace:
>>
>> > linkSource.createPageRenderLink(DisplayImagePage.class.getSimpleName(),
>> false, new Object[]{imageId});
>>
>> with
>>
>>
>> pageRenderLinkSource.createPageRenderLinkWithContext(DisplayImagePage.class,
>> imageId);
>>
>> Josh
>>
>> On Fri, Aug 5, 2011 at 1:39 PM, David Canteros
>> <davidcanteros....@gmail.com> wrote:
>> > 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
>> >>
>> >>
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to