>  I think that your solution is the best but also the hardest way ! Checking
> every properties in every pages ... wooahh !

:) Hehehe... yeah, I tend to lean towards correct over easy.


On Sat, Apr 12, 2008 at 2:24 AM, Stephane Decleire
<[EMAIL PROTECTED]> wrote:
> Thanks Josh,
>
>  I think that your solution is the best but also the hardest way ! Checking
> every properties in every pages ... wooahh !
>  Would not it be very handy to have the framework raise an event in case of
> a session loss (for example as for a 404 error) that we could catch to
> simply redirect to a specific page or to further investigate and check
> properties like in your solution for specific pages ?
>
>
>
>  Stephane
>
>  Josh Canfield a écrit :
>
> > Hey Stephane,
> >
> >
> >
> > > I think that i did not explain very well the problem i encounter ... so
> i
> > > will try to explain it better (so hard in a foreign language ...)
> > >
> > >
> >
> > I understood the problem, sorry if my answer didn't give you what you
> needed :)
> >
> >
> >
> > > In this case, it will just be an inconvenient but if the property is an
> > > object and not a string and this object is used in the rendering of the
> page
> > > B, we will get the awfull "Null pointer exception" error !!! :-(
> > >
> > >
> >
> > The basic pattern would be to check your state in one of your
> > onActivate methods and redirect or proceed based on your requirements.
> > activation events are called in order of name, then number of
> > properties so you can pick whether your activation happens before or
> > after your general activation occurs.
> >
> > @OnEvent("activate")
> > public Object _onActivate() {
> > // to run before other activation handlers
> > // check @Persist properties
> > }
> >
> > If this is a common property between a set of pages then you can
> > consider creating a base class with it's own activation handler to
> > consolidate your property validation. If the property is invalid
> > (null, incomplete, etc) you can do the right thing for your pages
> > whether that is redirecting to another page, initialize the object
> > somehow or something else. In some cases, like message, do nothing is
> > probably an ok answer.
> >
> >
> >
> > > In the simplest case, we need to check the existence of the HTTP session
> in
> > > allmost all page activation events and redirect the user on a specific
> page
> > > when the session as expired !
> > >
> > >
> >
> > I wouldn't check for the existence of the HTTP session, I'd actually
> > validate the individual properties in the page. This is what I mean by
> > programming defensively. You can't infer that if a session exists, or
> > even that one of your properties is set, that all of your properties
> > are safe, who knows how your user got to the page, or how your
> > co-worker wrote his page that is linking to yours.
> >
> > Josh
> >
> > On Fri, Apr 11, 2008 at 2:57 AM, Stephane Decleire
> > <[EMAIL PROTECTED]> wrote:
> >
> >
> > > I think that i did not explain very well the problem i encounter ... so
> i
> > > will try to explain it better (so hard in a foreign language ...)
> > >
> > > Suppose i have a page A which call a page B after initializing a
> property of
> > > B :
> > >
> > > [Page A]
> > >
> > > @InjectPage
> > > private B b;
> > >
> > > @OnEvent (value="action")
> > > Object gotoB() {
> > >  b.setMessage("hello");
> > >  return b;
> > > }
> > >
> > > The user is now on the page B with its welcome message. He takes a break
> at
> > > the coffee machine. When he comes back, he tries to refresh his page.
> But he
> > > has discuss two much time with his friends while drinking his coffee and
> his
> > > session has just expired ! (the session there is the HTTP session).
> > > For Tapestry, that's mean that a new HTTP session will be created for
> this
> > > user and the page B will be rendered one more time as if the user was a
> new
> > > one. As a consequence, the content of the message property will not be
> set
> > > when the page B is rendered.
> > > In this case, it will just be an inconvenient but if the property is an
> > > object and not a string and this object is used in the rendering of the
> page
> > > B, we will get the awfull "Null pointer exception" error !!! :-(
> > > Since, the power of Tapestry is to present the developer "HTML pages" as
> > > objects, passing data by setting properties from page to page is a
> common
> > > pattern and we need to check for the presence of our properties in
> allmost
> > > all pages of an application when the HTTP session is lost.
> > > In the simplest case, we need to check the existence of the HTTP session
> in
> > > allmost all page activation events and redirect the user on a specific
> page
> > > when the session as expired !
> > > Am i wrong ?
> > >
> > > Stephane
> > >
> > > Josh Canfield a écrit :
> > >
> > >
> > >
> > >
> > > >
> > > > > One approach is to store this data transiently in an ASO.
> > > > >
> > > > >
> > > > >
> > > > >
> > > > http://tapestry.apache.org/tapestry5/tapestry-core/guide/appstate.html
> > > >
> > > > "With an ASO, the value is automatically stored outside the page; with
> > > > the default storage strategy, it is stored in the session. "
> > > >
> > > > Unless you've built a different ASO storage strategy, your value is
> > > > going into the session and a session timeout will lose that value as
> > > > well.
> > > >
> > > > My advice, build your app defensively. Don't depend on objects being
> > > > available if they are being pulled from the session, or even the
> > > > database for that matter. Understand what it means if a session times
> > > > out at every step of your workflow so you can do the right thing when
> > > > the object isn't there. Build tests that hit those pages with no
> > > > session to verify the behavior.
> > > >
> > > > Good luck!
> > > > Josh
> > > >
> > > > On Thu, Apr 10, 2008 at 3:55 AM, Peter Stavrinides
> > > > <[EMAIL PROTECTED]> wrote:
> > > >
> > > >
> > > >
> > > >
> > > > > Hi Stephane
> > > > >
> > > > > One approach is to store this data transiently in an ASO. (This data
> > > > >
> > > > >
> > > >
> > > object
> > >
> > >
> > > >
> > > > > needs to be serializable though, but using soft references works
> great).
> > > > >
> > > > >
> > > >
> > > In
> > >
> > >
> > > >
> > > > > your getter method be sure to check if its null and if so
> reinitialize
> > > > > it)... Inject the ASO in your pages and never worry about data
> > > > >
> > > > >
> > > >
> > > activation in
> > >
> > >
> > > >
> > > > > pages. This is the real value of IoC. However, bear in mind when
> using
> > > > > persisted data if it becomes large, it gets expensive to carry
> around in
> > > > >
> > > > >
> > > >
> > > a
> > >
> > >
> > > >
> > > > > high volume application, so you loose scalability.
> > > > >
> > > > >
> > > > >
> > > > > Stephane Decleire wrote:
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > > Hi,
> > > > > >
> > > > > > I would like to know how do you handle session timeout with T5 or
> if
> > > > > >
> > > > > >
> > > > >
> > > >
> > > there
> > >
> > >
> > > >
> > > > >
> > > > > >
> > > > > >
> > > > > is a "design pattern" for this case.
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > > When a session timeout occurs, a lot of pages won't work because
> of a
> > > > > >
> > > > > >
> > > > >
> > > >
> > > lack
> > >
> > >
> > > >
> > > > >
> > > > > >
> > > > > >
> > > > > of data (for example, normaly setted before returning the page). So
> i
> > > > >
> > > > >
> > > >
> > > need
> > >
> > >
> > > >
> > > > > to write a piece of code in the activation event of almost of my
> pages.
> > > > >
> > > > >
> > > >
> > > In
> > >
> > >
> > > >
> > > > > T4, i would have writen it in a parent page and would have
> subclassed
> > > > >
> > > > >
> > > >
> > > all
> > >
> > >
> > > >
> > > > > the pages from it. In T5 should i consider writing a mixin or
> something
> > > > >
> > > > >
> > > >
> > > else
> > >
> > >
> > > >
> > > > > ?
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > > Thanks in advance.
> > > > > >
> > > > > > Stephane
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > >
> ---------------------------------------------------------------------
> > > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > >
> >
> >
> >
> >
> >
>



-- 
--
TheDailyTube.com. Sign up and get the best new videos on the internet
delivered fresh to your inbox.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to