It should be:
<% int i = 0; %>
<logic:iterate id="list" name="adminUpdateProfileForm"
property="customerContacts">
<tr> <% i++ ; %>
<td><html:text property="<%= \"customerContact[\" + i \"].contactName\"
%>"/></td>
</tr>
</logic:iterate>
You need to replace the whole string. The exception would have been from
the BeanUtils not able to understand what the [i] would have meant. If you
have an iterator in a scriptlet, then you need to always use a scriptlet
to access it. Usually. Mostly.
I had a feeling there was a change made to iterate recently to give you
an index value, but I can't remember what it was.
I usually use a Map and have the key as the integer value in the index
for the entry. Works well when you don't have liner numbering in the
list of key/value pairs.