1 Reply Latest reply on Sep 19, 2009 8:42 PM by phantasmo

    Problem with validating <h:selectManyListbox>

    phantasmo

      I have an Item entity associated with many Tag entities.
      The page for adding new Items has the following snippet:


      <s:decorate id="tagsField" template="layout/edit.xhtml">
                      <ui:define name="label">Tags</ui:define>
                      <h:selectManyListbox style="width: 300px;" size="10" value="#{itemHome.instance.tags}">
                               <f:validator validatorId="TagValidator"/>
                               <s:selectItems var="t" value="#{allTags}" label="#{t.name}" />
                               <s:convertEntity />
                          </h:selectManyListbox>                             
                  </s:decorate>



      This is TagValidator code:



      public void validate(FacesContext ctxt, UIComponent cmp, Object val) {  
      
                String message = null;  
      
                try {  
                     List selectedVals = (List)val;
                     int numberOfTags = 0;
                     if (selectedVals != null) {
                          numberOfTags = selectedVals.size();
                     }
                     if (numberOfTags > 5)
                          message = "No more than 5 tags are allowed!";
                } catch (Exception e){               
                     message = "Something went wrong while processing tags!";
                }
      
                if (message != null) { 
                     FacesMessage msg = new FacesMessage(  
                               FacesMessage.SEVERITY_ERROR, message, message);  
                     throw new ValidatorException(msg);  
                }  
           }  



      Now, when I press Save, although the validation passes, I get the message The value is invalid and the operation fails. I concluded it must have something to do Seam, as my custom validation passes.


      Any idea what this may be related to? Any help is appreciated.