I would probably take a different approach 
The reason the usual approach won't work is because (as you identified) you are submitting the entire set of checkboxes over more than one request, however, the entire set of checkboxes on the formBackingObject is overridden per request.
To resolve this you need to "remember" the previously selected checkboxes over each request. Two possible solutions:
- include the previously selected checkboxes as hidden fields in the next page (urgh, horrible, just so wrong)
- don't allow your formBackingObject.setSelectedCheckBoxes(Object[] selected) to overwrite your set, so rather than:
Code:
class MyFormBackingObject {
private Set theSelectedObjects;
public void setSelectedObjects(final Object[] selectedObjects) {
this.theSelectedObjects = new HashSet(Arrays.asList(selectedObject));
}
}
simply do this:
Code:
class MyFormBackingObject {
private Set theSelectedObjects;
public void setSelectedObjects(final Object[] selectedObjects) {
this.theSelectedObjects.addAll(new HashSet(Arrays.asList(selectedObject)));
}
}
in otherwords, keep adding to the set instead of replacing the set (or list whatever).
To do this you obviously need to store your formBackingObject in session (or flow if you are using spring web flow).
HTH.