[Seaside] Rendering Component in a WAPragmaBasedRestfulHandler
Camillo Bruni
camillo.bruni at inria.fr
Wed Apr 13 16:36:56 UTC 2011
Well I think its currently quite hard to do a nice transition from a normal seaside application using the default, non-readable url to an application with nice urls.
Since extracting the state from the URL is pretty straight forward, though much nicer with the pragma-based approach in REST. However, since I come from the Django world, I expect some simple dispatch logic to map from the URLs to the existing components.
But lets try and figure out if it will work ;)
camillo
On 2011-04-13, at 18:28, Julian Fitzell wrote:
> Unless, you're re-using some of the rendering code in multiple places,
> you might find it cleaner to simply subclass
> WAPragmaBasedRestfulHandler to provide a renderer. It could even be
> implemented with an additional pragma instead of hardcoding:
>
> MyFilter>>#listingOfProject: projectName on: html
> <GET>
> <Path: '/{projectName}'>
> <Renderer: #WARenderCanvas>
> "Or, alternatively just: <Canvas>"
>
> html text: 'hello world'
>
> You could of course then "html render: anObject", though I'd suggest
> that you don't really want to use components here, because you have no
> session and thus no state for them to maintain. You would probably be
> better to subclass WAPainter if you want to re-use some rendering code
> in several places.
>
> Julian
>
> On Wed, Apr 13, 2011 at 5:10 PM, Tobias Pape <Das.Linux at gmx.de> wrote:
>>
>> Am 2011-04-13 um 17:38 schrieb Camillo Bruni:
>>
>>> Hi,
>>>
>>> I am onto building test website in seaside which should have nice urls. I stumbled upon the Seaside-REST package, which seems like a nice solution to map the urls onto state and components.
>>>
>>> However so far I could not figure out how I should render a component from within a WAPragmaBasedRestfulHandler method.
>>>
>>> This is how I imagine it should work:
>>> request -> stateful request handler -> choose component and initialize state -> render component
>>>
>>> What is the proper way to do this?
>>
>> Think of this:
>>
>> MyFilter>>#listingOfProject: projectName
>> <GET>
>> <Path: '/{projectName}'>
>> MyComponent new respondRendered
>>
>> with
>>
>> MyComponent>>#respondRendered
>> self requestContext respond: [:response |
>> response
>> contentType: WAMimeType textHtml;
>> nextPutAll: ( WARenderCanvas builder
>> fullDocument: true;
>> rootBlock: [ :root |
>> self updateRoot:root ];
>> render: [ :canvas |
>> self renderContentOn: canvas ])].
>>
>> This merely emulates a normal seaside run.
>> But more elaborate versions are possible.
>>
>> So Long,
>> -Tobias_______________________________________________
>> seaside mailing list
>> seaside at lists.squeakfoundation.org
>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>>
> _______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
More information about the seaside
mailing list