The instance of Class1 should be put in the model by the formBackingObject method (just return it there). The two lists (Class2 and Class3 instances) need to be put in the referenceData map.
Then, suppose you have a setter on Class1
Code:
setClass2Instance(Class2 object);
You'd have to bind a property editor in initBinder capable of transforming Class2 instances to and from Strings and bind on the class2Instance path in your JSP. The spring:transform tag will now use the property editor found by the spring:bind tag to transform whatever you give it.
Code:
<spring:bind path="command.class2Instance">
<c:forEach items="${class2List}" var="class2">
<option value="<spring:transform value="${class2}"/>">
</spring:bind>
One thing however, if you're using identifiers in your property editors, but also want to output the name of the class2, you still have to do a manual c:out:
Code:
<option value="<spring:transform value="${class2}"/>"><c:out value="${class2.name}"/></option>
Hope this clarifies things a bit.
Alef