Sometimes I think I understand how indexed properties work, but every time I use them I have to step back and think about it. I seem to recall having problems with having get and set method with the same name where the parameter and return types did not match. Instead of having overloaded versions of getEmploymentHistory, I would use unique names such as this:
public ArrayList<EmploymentFormBean> getEmploymentHistoryList() public EmploymentFormBean getEmploymentHistoryItem(int index)
I would also remove the method setEmploymentHistory. Struts will not call this method, but if you need to from your code then rename it addEmploymentHistory. I am not sure that will solve the problem, but it seems worth a try.
I am not sure that you have to name your methods per my suggestion, but that is a convention that I have used. I remember working with another developer to track down an issue, and it was related to having mismatched get and set methods. You have a getEmploymentHistory that returns ArrayList<EmploymentFormBean> and a setEmploymentHistory method that takes an EmploymentFormBean as a parameter. At a minimum this violates the spirit of Java Bean properties.
I am not sure if the following example is 100% correct (plus I don't know the properties of your EmploymentFormBean class). The bean:write example does not submit back to the server, so you can just use the id value of the iterate tag. The html:text example uses a scriptlet and the html:checkbox uses the indexed property.
I brought this back from the farm where they grow the tiny ads: