[Seaside] Nested form tags
Pavel Krivanek
squeak3 at continentalbrno.cz
Fri Nov 4 08:23:28 CET 2005
ShoreComponents solve this problem. Demo is included.
http://www.squeaksource.com/ShoreComponents/
-- Pavel
> I believe I found the bug that causes the weird effects that have been
> observed when nesting forms.
>
> When there are nested <form> in the html and when a submit button is
> pressed, the resulting http
> request contains the "_s" and the "_k" hidden fields many times (once
> for each form).
> As a result the http fields in the request are holding collection of
> strings rather than just strings
> (the field dictionary object is too smart !) In such situations,
> Seaside is not able to retrieve the
> session and shows the expiration screen.
>
> I found that the consequences of the bug can be in corrected
> WAKom>>convertRequest:
> where the request fields can be computed differently. The
> implementation in the attachment
> eliminates the false expiration.
>
> This does not occur in VisualWorks where the computation of the
> request fields are always
> and consistently available as collections or strings.
>
> The attached change set includes both the fix and a test component
> with nested <form>
>
> Enjoy,
> Michel.
>
>
>
>------------------------------------------------------------------------
>
>'From Squeak3.7 of ''4 September 2004'' [latest update: #5989] on 3 November 2005 at 10:28:53 pm'!
>WAComponent subclass: #WANestedForms
> instanceVariableNames: ''
> classVariableNames: ''
> poolDictionaries: ''
> category: 'Seaside-Examples-Test'!
>
>!WAKom methodsFor: 'as yet unclassified' stamp: 'mb 11/3/2005 22:28'!
>convertRequest: aKomRequest
> | request fields waFields |
> self processMultipartFields: aKomRequest.
> fields := aKomRequest method = 'POST'
> ifTrue: [aKomRequest postFields]
> ifFalse: [aKomRequest getFields].
> waFields := Dictionary new.
> fields
> keysAndValuesDo: [:k :v | v isString
> ifFalse: [waFields at: k put: v first]
> ifTrue: [waFields at: k put: v]].
> request := WARequest
> method: aKomRequest method
> url: aKomRequest url unescapePercents
> headers: aKomRequest header
> fields: waFields
> cookies: aKomRequest cookies
> nativeRequest: aKomRequest.
> aKomRequest method = 'PUT'
> ifTrue: [request fields
> at: 'PUTData'
> put: (aKomRequest stream next: aKomRequest contentLength)].
> ^ request! !
>
>
>!WANestedForms methodsFor: 'rendering' stamp: 'mb 11/3/2005 22:17'!
>renderContentOn: html
> html heading: 'Buttons in nested forms'.
> html text: 'Click the buttons and get an expired session !!'.
> html
> form: [html
> submitButtonWithAction: [self inform: 'Button1']
> text: 'Button1'.
> html
> form: [html
> submitButtonWithAction: [self inform: 'Button2']
> text: 'Button2']]! !
>
>
>!WANestedForms class methodsFor: 'initialize-release' stamp: 'mb 11/3/2005 22:13'!
>initialize
> self registerAsApplication: 'NestedForms'! !
>
>WANestedForms initialize!
>
>!WANestedForms class reorganize!
>('initialize-release' initialize)
>!
>
>
>!WANestedForms reorganize!
>('rendering' renderContentOn:)
>!
>
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Seaside mailing list
>Seaside at lists.squeakfoundation.org
>http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>
>
More information about the Seaside
mailing list