Okay. I found the cause of the problem.
I was using a MyFaces HtmlDataTable, but a Sun RI HtmlCommandLink was enclosed in a row. Apparently unique ids were not being generated for each row, causing every CommandLink's actionListener to be fired when any CommandLink was clicked. When I switched the DataTable back to RI from MyFaces, a unique id is generated for each row's CommandLink.
I wanted to use the MyFaces "rowindex" attribute. Maybe if I used the MyFaces
JSF impl, things would work, but I'm mandated to use the Sun JSF RI implementation. Oh well.
