h:selectManyCheckbox and enums
stu2 Mar 8, 2007 8:06 PMI'm trying to populate a group of checkboxes from enum values. I've gotten it working so that it displays properly (all checkboxes properly appear) but I get a converter exception when I submit the form. I wasn't able to find any examples of selectMany anything in the example apps, so forgive me if this is a basic question!
Anyway, here's the exception I'm seeing:
[ExceptionFilter] exception root cause java.lang.NullPointerException at org.apache.myfaces.shared_impl.renderkit._SharedRendererUtils.getConvertedUISelectManyValue(_SharedRendererUtils.java:147) at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getConvertedUISelectManyValue(RendererUtils.java:673) at org.apache.myfaces.shared_impl.renderkit.html.HtmlCheckboxRendererBase.getConvertedValue(HtmlCheckboxRendererBase.java:299) at javax.faces.component.UISelectMany.getConvertedValue(UISelectMany.java:326) at javax.faces.component.UIInput.validate(UIInput.java:349) at javax.faces.component.UISelectMany.validate(UISelectMany.java:315) at javax.faces.component.UIInput.processValidators(UIInput.java:183) at javax.faces.component.UIForm.processValidators(UIForm.java:70) at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624) at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:146) at org.ajax4jsf.framework.ajax.AjaxViewRoot.access$201(AjaxViewRoot.java:53)
My SFSB looks like this (only relevant bits included):
private ValidationCategory [] validationCategories; public ValidationCategory [] getValidationCategories() { return validationCategories; } public ValidationCategory [] getAllValidationCategories() { return ValidationCategory.values(); } public void setValidationCategories(ValidationCategory [] validationCategories) { System.out.println("Setting val categories. Size is " + validationCategories.length); this.validationCategories = validationCategories; }
And the facelets section for the form is this:
<h:form id="productTypeForm"> <h:selectManyCheckbox id="productTypes" value="#{feedMapping.validationCategories}"> <s:selectItems value="#{feedMapping.allValidationCategories}" var="item" label="${item.name}" /> </h:selectManyCheckbox> <div> <h:commandButton value="Continue" action="#{feedMapping.selectProductTypes}"> <s:conversationId /> </h:commandButton> </div> </h:form>
I've tried several permuations of how to represent the selected values: as a List and in this case as an [] since I found a JSF forum post saying this was how it worked.
s:selectItems is supposed to automatically register a converter for Enums, and it seems to be working for rendering the group. But can anyone suggest how I could capture the selected results?
Thanks!