The question of how to support checkboxes keeps appearing over and over again. This is how I deal with it:
Assume:
In my simpleFormController I register a MyClassPropertyEditor in initBinder:Code:class MyClass { private String id; private String name; // accessors } class MyBackingObject { private MyClass[] myClasses; // accessors }
then in reference data I construct a map of *all* possible instances of MyClass:Code:public initBinder(HttpServletRequest request, ServletRequestDataBinder binder) { binder.registerCustomEditor(MyClass.class, new MyClassPropertyEditor()); }
then in my jsp:Code:public Map referenceData(HttpServletRequest request, Object command, Errors errors) throws Exception { MyBackingObject form = (MyBackingObject) command; Set selectedMyClasses = new HashSet().addAll(Arrays.asList(form.getMyClasses())); Map allMyClasses = new HashMap(); for (Iterator i = myDAO.getAllMyClasses(); i.hasNext(); ) { MyClass myClass = (MyClass) i.next(); allMyClasses.put(myClass, new Boolean(selectedMyClasses.contains(myClass)); } Map model = new HashMap(); model.put("allMyClasses", allMyClasses); return model; }
I typed this in, so it probably doesn't compile, but you get the ideaCode:<c:forEach items="${allMyClasses}" var="allMyClassesEntry"> <input type="checkbox" name="command.myClasses" value="${allMyClassesEntry.key.name}" <c:if test="${allMyClassesEntry.value}">selected</c:if>></input> </c:forEach>
HTH.



Reply With Quote
Thanks Bob.
