3 Replies Latest reply on Mar 9, 2007 5:43 AM by Pete Muir

    h:selectManyCheckbox and enums          

    Stuart Robertson Novice

      I'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!