Welcome to the JavaRanch! But can you set your display name to something a little less abbreviated? Thanks.
Also, you will find a "Code" button on the Ranch message editor. You can use it to make code and XML samples easier to read.
I think your main problem is that you need more understanding of the JSF model architecture and the JSF life cycle.
Because an HTML SELECT OPTION has 2 components (display value and data value), the corresponding JSF element (selectItem) is not a simple
string, it's a special JSF model wrapper. In fact, it's the SelectItem class. Rather than define each element on the View Definition, it's often easier to define the whole item list as a
unit. So rather than a View definitions for "info.states[0]", "info.states[1]" and so forth, you can define a collection of items using the "f:selectItems" tag, and have it reference a List or array of SelectItem objects fetched as a unit ("info.states").
The selectItems must be initialized BEFORE the View is displayed. If you attempt to set a SelectOneMenu to a value that isn't in that set of selectItems, that is invalid.
Rather than force submission of the entire form, it's also usually preferable to use AJAX. AJAX can submit partial forms, eliminating the problem you get that if even one (unrelated) control value on the form is not valid, the entire form is rejected and the valueChangeListener won't fire. AJAX support is built into JSF2.
What I normally do when cascading selectOneMenus like this is make the valueChangeListener null out the lower-level selectItem collection and make the corresponding "get" method for that collection automatically (re)build the selectItem collection based on the higher-level value in cases where that collection was found to be null.