Quand on écrit une application web avec Seaside, on se soucie en général peu des urls, et pour cause, celles-ci représentent l’état de l’application, et non le chemin pour accéder à une ressource.
Comment faire alors si l’on veut construire des urls bookmarkables?
Cette question est souvent posée sur la mailing-list, bien que la solution soit relativement connue, j’ai donc décidé d’écrire un article sur le sujet.
Il suffit pour cela de surcharger deux méthodes : #initialRequest: et #updateUrl: dans votre composant principal par exemple. WABrowser utilise cette technique, je vous conseille donc de regarder son fonctionnement.
Imaginons que l’on ait deux composants, MYMainComponent et MYSubComponent :
MYMainComponent>>initialRequest: aRequest
super initialRequest: aRequest.
aRequest fields at: 'contents' ifPresent: [ :contents | self setContents: contents]
MYSubComponent>>updateUrl: aUrl
super updateUrl: aUrl.
aUrl addParameter: 'contents' value: self uri
MYSubComponent>>uri
^'subcomponent'
Vous obtiendrez ainsi des urls du type :
http://foo.bar/maincomponent/?contents=subcomponent
Suivant le type d’url que vous recherchez, pouvez utiliser la methode #addToPath:.
MYSubComponent>>updateUrl: aUrl
super updateUrl: aUrl.
aUrl addToPAth: self uri
L’url obtenue ressemblera à ceci :
http://foo.bar/maincomponent/subcomponent
Noubliez pas d’adapter #initialRequest: à vos besoins.
Concernant le problème de la validité des liens après l’expiration de la session, je vous recommande cet article de Ken Treis.