[Seaside] Seaside and urls
Philippe Marschall
philippe.marschall at gmail.com
Wed Nov 13 21:16:32 UTC 2013
On Wed, Nov 13, 2013 at 4:59 PM, Esteban Lorenzano <estebanlm at gmail.com> wrote:
> I'm using Seaside-REST for that (even it is not its purpose), but I needed to hack it a bit (bah, not a BIT really...)
>
> See:
>
> in WARestfulFilter subclass: #EveRestFilter:
>
> EveRestFilter >>#shoppingList
> <get>
> <path: 'shopping-list'>
>
> self continueWithRoot: [ :root |
> root startOn: EveUNOPSShoppingListPanel new ].
>
> EveRestFilter >>#continueWithRoot: aBlock
> "Continues the execution of the application.
> I will pass aBlock to the root class of app, which I assume is a REApplication.
> Otherwise, this will fail"
> | requestContext application session rootComponent |
>
> requestContext := self requestContext.
> application := requestContext application.
> session := self obtainSessionWithApplication: application context: requestContext.
>
> requestContext
> push: session
> during: [
> rootComponent := requestContext rootComponentIfAbsent: [ nil ].
> rootComponent ifNil: [
> rootComponent := (application preferenceAt: #rootClass) new.
> requestContext rootComponent: rootComponent ].
> rootComponent do: aBlock.
> self next handleFiltered: requestContext ].
>
> EveRestFilter >>#obtainSessionWithApplication: application context: requestContext
> | sessionKey session |
>
> sessionKey := application trackingStrategy keyFromContext: requestContext.
> session := sessionKey ifNotNil: [
> application cache
> at: sessionKey
> ifAbsent: [ nil] ].
>
> session ifNil: [
> session := application newSession.
> application register: session ].
>
> ^ session
>
>
> then in the main component:
>
> EveMainComponent>>startOn: aComponent
> contentComponent show: aComponent
>
>
>
> is probably not the best way to do it, but is the easiest way I found, and it works :)
In Seaside 3.1 there is WARestfulComponentFilter >> #startSessionWithRoot:
Cheers
Philippe
More information about the seaside
mailing list