Hebert - you need a dataModel to decorate your row data with the cursor constructs needed to enumerate the rows in the table. That's why you can't bind the collection directly to the dataTable control.
Christopher - When you fire an action processor using a commandButton or commandLink on a row in a dataTable, you can find out which row was fired using the datamodel methods "getRowData()" and "getRowNumber()" - assuming I haven't remembered their names wrong. Again.
You can do forms inside a dataTable, but they have to obey standard XML tag/endtag matching rules. So you could wrap a form around a single column's items, for example. However, that's a bit much for most of us.
Customer surveys are for companies who didn't pay proper attention to begin with.
It's an old series of articles, but it's still relevant, and it really helped me when I was getting started. Google IBM Developerworks series "JSF For Nonbelievers" by Rick Hightower. He has a good example of a table/detail application.