[Seaside] Collecting form input

Sebastian Nozzi sebnozzi at googlemail.com
Sat Oct 4 20:18:19 UTC 2008


Hello all,

when trying to collect the values from a form, I run into a problem.

Let's suppose I write a form to add a new user (user name), together
with an user-type.

I was trying to do something like this:

| newName newType |
html
       form: [html textInput value: 'type name here';
                       callback: [:name | newName := name].
               html select list: userTypes;
                       callback: [:userType | newType := userType];
                       labels: [:userType | userType asString].
               html submitButton
                       callback: [self addUserNamed: newName withType: newType];
                        value: 'Add New User']

But it didn't work. Inside of the callback-block of the submit-button,
both variables were nil.
I searched a little in Internet and the cause seems that when the
block is created, it binds to the value of both variables, which at
that time WERE nil.

Is this correct? I think I read that the new Squeak versions will
correct this "problem"? (something like a new block-compiler...)

Anyway, I reverted to following solution:
(which works)

| params |

params := Dictionary new.
html
       form: [html textInput value: 'type name here';
                       callback: [:name | params at: #name put: name].
               html select list: userTypes;
                       callback: [:userType | params at: #type put: userType];
                       labels: [:userType | userType asString].
               html submitButton
                       callback: [self addUserNamed: (params at:#name)
withType: (params at:#type)];
                        value: 'Add New User']

Did I do the right thing? Or is there a better way?

Thanks!

Sebastian


More information about the seaside mailing list