[Seaside] 'Clean' URLs in Seaside
pbpublist at gmail.com
Tue May 12 18:44:15 UTC 2015
On Tue, 2015-05-12 at 08:07 +0200, Philippe Marschall wrote:
> On Thu, May 7, 2015 at 8:34 PM, Phil (list) <pbpublist at gmail.com> wrote:
> > Philippe,
> > On Thu, 2015-05-07 at 14:33 +0200, Philippe Marschall wrote:
> >> On Mon, May 4, 2015 at 11:27 AM, Phil (list) <pbpublist at gmail.com> wrote:
> >> > I managed to get Seaside 2.x to use 'clean' URLs by following Ramon's
> >> > post here http://onsmalltalk.com/clean-urls-in-seaside/ a while back.
> >> > However, some things appear to have changed in 3.x and what needs to
> >> > change to get rid of the _k parameter (i.e. move it into a cookie) is
> >> > different now. So could anyone with experience in doing this in 3.x
> >> > share what's involved?
> >> >
> >> > Also, it's understandable why passing this in the URL was the way to go
> >> > 5+ years ago, but cookies are pretty widely accepted as requirements on
> >> > many sites these days.
> >> Some countries also have cookie laws (yes, really) that don't apply
> > warnings that I assumed the majority of EU (and other countries with
> > similar laws) sites just addressed it via disclosure. That is a very
> > good reason not to enable cookies by default.
> >> > Is there some reason this hasn't been made a
> >> > simple config option as it was for the _s parameter? Seems like it
> >> > would be pretty popular...
> >> _k is used to identify the state snapshot. When you hit the back
> >> button you need to get the old _k so that Seaside can revert the
> >> component state. That's why it is technically not possible to
> >> implement it with a cookie. Are you willing to give up state
> >> snapshoting?
> > Thanks for explaining this... I hadn't thought it through but now
> > understand why what I was asking for wouldn't work. To answer your
> > question: yes, I would be willing to give up the state snapshot to get
> > rid of the parameter. For this application (basically a simple database
> > lookup app), it looks like I can pass all the state needed via
> > #updateUrl: to get a bookmark-friendly URL so I think just dropping _k
> > entirely could work for me. How would I do that?
> There is a way of doing this if you never use #callback: and a more
> complicated one if you want to use #callback:. Time to learn some
> Seaside :-)
> 1. You need a custom WAActionPhaseContinuation subclass that doesn't
> make a state snapshot in #continue, maybe you can just get way with
> implementing #captureState empty
> 2. You need a custom WARenderPhaseContinuation subclass that
> implements #processRendering: so that the continuation is not added to
> the action URL.
> 3. You need a custom WASession subclass that knows your two
> continuations and implements #handleFiltered: so that it finds them
> without _k. Is is a bit trickier to do if you do a redirect after
> action processing. If you don't do a redirect reloading the page will
> execute the last callback again.
> 4. if you want to use #callback: you have to implement a custom
> WACallbackRegistry that "forgets" old callbacks
Fantastic... that definitely helps get me going in the right direction.
> Having said all of that maybe it is easier to avoid sessions in your
> case and use Seaside-REST and do your own rendering with:
> WAHtmlCanvas builder
> fullDocument: true;
> render: MyPainter new
> Just remember you can't do #callback: in this case either.
I've looked at this but it appears to be overkill for my needs, and much
more work in the long term from a maintenance standpoint. Going through
this exercise is giving me a good understanding of why this is
non-trivial in terms of providing a generic solution for a middle
More information about the seaside