(yet another disclaimer - I too work for Curl and love programming in Curl)|
My past is very heavy in HTML/JS/CSS/DHTML front end and PHP/JSP/Perl/C++/Java backend development with whatever db in a supporting role. Forms have always been a nightmare for me as well - maintaining state between HTTP requests (did the user actually fill out their name yet?), presenting a nice UI that the user finds navigable and intuitive, combined with not wanting to overpower the user or send down essentially a full fledged application.
Curl offers a nice middle ground here. We provide the simplicity of your standard Weby UIs offered in HTML and so on with the power of your hardcore Java / C++ UIs.
We have the baseline inputs: TextFields (yes TextAreas are coming next release, our bad), DropdownLists, ComboBoxes, RadioButtons, ScrollBoxes, etc. in the Core of the language. But, you can easily extend these components by either subclassing them or creating your own to act and behave as you wish.
Additionally, an important quality is the ability to sanity check a user's input - if they are filling out an address form and select a certain state, then the applet can check the zip is appropriate for example. That sort of client side data verification is just the tip of the iceberg though since that is doable today.
What is much more dificult is making the form 'live'. In Curl, a rendered Web page is a live program - anything can affect anything else - including text to text. Very easily you can have forms in Curl where components are appearing / disappearing based on the user's interaction.
For example, why have the question "what is your dog's name" after the question "do you have a dog" if the user never checks yes? The second question can appear in the form when the user checks affirmative and disappear when checked in the negative.
The text above the form can be blank and after the user types his/her name into the form, text appears saying "Hello xyz" or whatever. The whole thing is live and interactive and a new ballgame.
Curl also has a repetoir of graphical containers like horizontal, vertical containers, tables, overlay boxes, canvases, grids, etc. which help the programmer achieve the desired form layout rapidly.
Oh yeah, and handling user input events like key presses, pointer motions, and so on are simple and can obviously do cool things like affect the graphical hierarchy of the page (mousing over a picture or a piece of text can make text somewhere else change or close part of the form or whatever).