You are quite correct, this does work.
However, I was trying to avoid using the "id" value, because I am seeing something weird about its behaviour.
messageTexts is an array with 5 elements, the first one is a string and the next 4 are null.
The iterator correctly goes through all 5 elements, but in all 5 cases, #theMessage is equal to the String in the first element. It apparently doesn't get cleared out once it has a non-null value.
That is why I was trying to use <s:property /> instead. It correctly reflects the null value of the last 4 elements.